前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyTorch 知识点归纳 —— 第1篇

PyTorch 知识点归纳 —— 第1篇

作者头像
唐国梁Tommy
发布2021-07-08 15:22:11
5720
发布2021-07-08 15:22:11
举报
文章被收录于专栏:唐国梁Tommy唐国梁Tommy

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

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

1. 张量的数据类型

① scalar 标量

② vector 向量

③ matrix 矩阵

④ n-dimensional vector 多维张量

代码语言:javascript
复制
# 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函数创建张量

代码语言:javascript
复制
torch.tensor(range(10))
torch.tensor(np.array([1,2,3,4]))
torch.tensor([1, 2, 3])

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

代码语言:javascript
复制
torch.rand(3,3) # 矩阵元素服从[0,1)上的均匀分布
torch.randn(2,3,4) # 元素服从标准正态分布

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

代码语言:javascript
复制
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方法)

代码语言:javascript
复制
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中的张量运算

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

代码语言:javascript
复制
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) # 横轴方向,求均值

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

代码语言:javascript
复制
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返回沿着该维度最大和最小值对应的序号是多少

代码语言:javascript
复制
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)

代码语言:javascript
复制
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) # 纵轴方向,降序

④ 矩阵的乘法

代码语言:javascript
复制
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():指定并创建一个维度,把列表沿着该维度堆叠起来,并返回

代码语言:javascript
复制
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():函数通过传入的张量列表指定某一个维度,堆叠后并返回。

代码语言:javascript
复制
torch.cat((a,b), dim=0) # 横轴方向
torch.cat((a,b), dim=1) # 纵轴方向

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

代码语言:javascript
复制
torch.split(a, 1, dim=0) # 横轴方向,分成2块
torch.split(a, 1, dim=1) # 纵轴方向,分成2块

(4)torch.chunk():分割

代码语言:javascript
复制
torch.chunk(a, 2,dim=0) # 横轴方向,分成两块
torch.chunk(a, 2,dim=1) # 纵轴方向,分成两块

⑥ 张量维度的扩增和压缩

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

代码语言:javascript
复制
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()方法

代码语言:javascript
复制
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])

⑦ 张量的广播

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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 唐国梁Tommy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档