专栏首页唐国梁TommyPyTorch 知识点归纳 —— 第1篇

PyTorch 知识点归纳 —— 第1篇

哈喽,各位同学好,从今天开始,我将不定期分享研究深度学习框架PyTorch过程中的一些学习心得和笔记。

福利:文末将附上案例代码文件下载地址】

1. 张量的数据类型

① scalar 标量

② vector 向量

③ matrix 矩阵

④ n-dimensional vector 多维张量

# scalar
x1 = torch.tensor(5.0) 

# vector
x2 = torch.tensor([1.0, 2.0])

# matrix
x3 = torch.tensor([[1, 2],
                   [3, 4]])

# n-dimensional vector
x4 = torch.tensor([[[1, 2],
                    [3, 4]],
                   [[5, 6],
                    [7, 8]]])

2. 张量的创建方式

① 通过torch.tensor函数创建张量

torch.tensor(range(10))
torch.tensor(np.array([1,2,3,4]))
torch.tensor([1, 2, 3])

② 通过pytorch内置的函数创建张量

torch.rand(3,3) # 矩阵元素服从[0,1)上的均匀分布
torch.randn(2,3,4) # 元素服从标准正态分布

③ 通过已知张量创建形状相同的张量

x = torch.tensor([[1, 2],
                  [3, 4]])

a1 = torch.zeros_like(x)
a2 = torch.ones_like(x)
a3 = torch.rand_like(x, dtype=float)
a4 = torch.randn_like(x, dtype=float)

3. 和张量维度相关的方法

假设:t = torch.randn(3,4,5)

① t.ndimension() # 获取维度的数目

② t.nelement() #获取张量的总元素数目

③ t.size() #获取该张量每个维度的大小,调用方法 ④ t.shape #获取该张量每个维度的大小,访问属性

⑤ view()方法 : view方法作用于原来的张量,传入改变新张量的形状,新张量的总元素数目和原来张量的元素数目相同。view方法并不改变张量底层的数据,只是改变维度步长的信息。

⑥ reshape()方法 : reshape方法会在形状信息不兼容的时候自动生成一个新的张量,并自动复制原始张量的数据(相当于连续调用view方法和contiguous方法)

t = torch.randn(3,4,5)
t.ndimension() # 3
t.nelement() # 60
t.size() # torch.Size([3, 4, 5])
t.shape # torch.Size([3, 4, 5])
t.view(-1, 2, 3)
t.reshape(6, 10)

4. PyTorch中的张量运算

① 涉及单个张量的函数运算

t = torch.rand(3,4)
t.sqrt()
torch.sqrt(t)
t.sqrt_()
torch.sum(t)
torch.sum(t, dim=0) # 横轴方向,求和
t.mean()
torch.mean(t, dim=0) # 横轴方向,求均值

② 涉及多个张量的函数运算

t1 = torch.tensor([1, 2])
t2 = torch.tensor([3, 4])
# 加法
t1 + t2
t1.add(t2)
# 减法
t1 - t2
t1.sub(t2)
# 乘法
t1 * t2
t1.mul(t2)
# 除法
t1 / t2
t1.div(t2)

③ 张量的极值和排序

(1)argmax,argmin返回沿着该维度最大和最小值对应的序号是多少

t = torch.randint(0, 20, (3, 4)) # 随机产生0 - 20的整数,3行4列
t.argmax(dim=0) # 横轴方向,最大值所在的索引
t.argmin(dim=0) # 横轴方向,最小值所在的索引
torch.max(t, dim=-1) # 返回最后一个维度的极大值和极大值的位置
torch.min(t, dim=-1) # 返回最后一个维度的极小值和极小值的位置

(2)排序函数sort(默认顺序是从小到大,如果从大到小,需要设置参数descending=True)

t = torch.randint(0, 20, (3, 4)) # 随机产生0 - 20的整数,3行4列
t.sort()
t.sort(dim=0) # 横轴方向
t.sort(dim=1) # 纵轴方向
t.sort(dim=1, descending=True) # 纵轴方向,降序

④ 矩阵的乘法

a = torch.tensor([[1,2],
                  [3,4]])
b = torch.tensor([[5,6],
                  [7,8]])
torch.mm(a, b) # 方式1
a.mm(b) # 方式2
a @ b # 方式3

⑤ 张量的拼接和分割

(1)torch.stack():指定并创建一个维度,把列表沿着该维度堆叠起来,并返回

a = torch.tensor([[1,2],
                  [3,4]])

b = torch.tensor([[5,6],
                  [7,8]])

torch.stack((a,b), dim=0) # 横轴方向
torch.stack((a,b), dim=1) # 纵轴方向

(2)torch.cat():函数通过传入的张量列表指定某一个维度,堆叠后并返回。

torch.cat((a,b), dim=0) # 横轴方向
torch.cat((a,b), dim=1) # 纵轴方向

(3)torch.split():输出是张量沿着某个维度分割后的列表。

torch.split(a, 1, dim=0) # 横轴方向,分成2块
torch.split(a, 1, dim=1) # 纵轴方向,分成2块

(4)torch.chunk():分割

torch.chunk(a, 2,dim=0) # 横轴方向,分成两块
torch.chunk(a, 2,dim=1) # 纵轴方向,分成两块

⑥ 张量维度的扩增和压缩

(1)增加张量的维度:torch.unsqueeze()函数和张量unsqueeze()方法

t = torch.rand(3,4)
t.shape # torch.Size([3, 4])
t = t.unsqueeze(-1)
t.shape # torch.Size([3, 4, 1])

(2)压缩张量的维度:torch.squeeze()函数和张量squeeze()方法

t = torch.randn(1, 3, 4, 1)
t.shape # torch.Size([1, 3, 4, 1])
t = t.squeeze(-1)
t.shape # torch.Size([1, 3, 4])

⑦ 张量的广播

需要把维度数目比较小的张量扩增到和维度数目比较大的张量一致。

t1 = torch.randn(3,4,5)
t2 = torch.randn(3,5)
t1.shape # torch.Size([3, 4, 5])
t2.shape # torch.Size([3, 5])
t2 = t2.unsqueeze(1) 
t2.shape # torch.Size([3, 1, 5])
t3 = t1 + t2
t3.shape # torch.Size([3, 4, 5])

代码文件下载地址:

链接:

https://pan.baidu.com/s/1V5saIWCYkaqqzPhb6_bKkA

密码:

w98i

本文分享自微信公众号 - 唐国梁Tommy(TangGuoLiangAI),作者:唐国梁Tommy

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-06-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 机器学习知识点归纳 第1篇

    哈喽,大家好,今天分享的内容是我长期学习Machine Learning过程中的一些学习笔记和心得,今天拿出来与大家分享。

    唐国梁Tommy
  • java知识点归纳

    java新手知识点归纳-java基础部分 ? 一. Java的运行(基础必备) 这条可能出看很简单,java程序的运行谁不会呢?不过很多时候, 我们只是单纯通过...

    企鹅号小编
  • PHP学习小知识点归纳

    Heredoc结构形式长字符串 首先使用定界符表示字符串(<<<),接着在“<<<“之后提供一个标识符GOD,然后是字符串,最后以提供的这个标识符结束字符串...

    Ewdager
  • Hive知识归纳——详解 hive 各个知识点

    CREATE FUNCTION [db_name.] function_name AS class_name [USING JAR|FILE|ARCHIVE...

    solve
  • Java知识点归纳-J2EE and Web 部分

    J2EE(Java2 Enterprise Edition) 刚出现时一般会用于开发企业内部的应用系统,特别是web应用,所以渐渐,有些人就会把J2EE和web...

    企鹅号小编
  • 20 图归纳 SQL 数据库知识点

    正失望至极,却从曹大的圈子中翻出来一篇《财新周刊》的 PDF. 近曹大者富,果真一点都没有错。

    Lenis
  • 前端面试常见知识点归纳

    Content-Length 首部告诉浏览器报文中实体主体的大小。这个大小是包含了内容编码的,比如对文件进行了 gzip 压缩,Content-Length 就...

    子润先生
  • 知识点归纳笔记:进程与线程

    任务栏鼠标右击,选中菜单中的“任务管理器”,然后打开,选中进程选项。此时映入你眼帘的便是系统中的后台进程列表。没错,这里就是你查看进程的地方,而且你还可以看到每...

    用户1272076
  • Java编程基础知识点和技术点归纳

    Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、...

    用户5814672
  • 关于数据库事务的知识点归纳

    在MySQL数据库管理系统中,默认情况下,事务是自动提交的,也就是说,只要执行一条DML语句,开启了事务,并且提交了事务。

    wuweixiang
  • 深度学习基础知识点归纳总结

    1. 最小化代价函数优化方法:BGD、SGD、MBGD、动量、NAG、Adagrad、AdaDelta、Adam、AMSGrad、牛顿法;

    小锋学长
  • C# 委托 、事件、同步、异步知识点归纳

    1.声明一个委托类型。委托就像是‘类'一样,声明了一种委托之后就可以创建多个具有此种特征的委托。(特征,指的是返回值、参数类型)

    vv彭
  • 7 papers | PyTorch官方框架论文;浙大阿里等新方法提升唇读效果

    论文 1:PyTorch: An Imperative Style, High-Performance Deep Learning Library

    机器之心
  • 手把手教你用PyTorch实现图像分类器(第二部分)

    回想一下,在本系列文章的第一篇中,我们学习了为什么需要载入预训练网络以及如何载入预训练网络,同时我们演示了如何将预训练网络的分类器替换为我们自己的分类器。在本篇...

    AI研习社
  • NodeJS知识点梳理-第二篇

    这里就不打开这个writeMe2.txt文件了,内容有点多,截图了你们看着也没什么意思。你们自己运行一下就可以了。

    何处锦绣不灰堆
  • NodeJS知识点梳理-第一篇

    或者我们直接运行一个我们本地的js也是一样的,直接node csdn_demo.js

    何处锦绣不灰堆
  • 知识点归纳笔记:你要知道浏览器是多进程的

    今天看到一张有意思的动图,拿来与大家分享一下:各大浏览器站在一起观赏风景,当预感到溅起的水花即将奔来的刹那,除IE浏览器成功接收了水花的洗礼外,其它的浏览器早就...

    用户1272076
  • 机器学习 | 四大常用机器学习Python库介绍

    今天这篇我们介绍下Python中常用的机器学习库(机器学习、深度学习啥的,小编还是建议使用Python进行建模编写哈),也算是本公号机器学习的第一篇推文,主要内...

    DataCharm
  • 【Pytorch 】笔记二:动态图、自动求导及逻辑回归

    疫情在家的这段时间,想系统的学习一遍 Pytorch 基础知识,因为我发现虽然直接 Pytorch 实战上手比较快,但是关于一些内部的原理知识其实并不是太懂,这...

    阿泽 Crz

扫码关注云+社区

领取腾讯云代金券