Pytorch基础——张量

Pytorch基础——张量

  • 1、认识张量
  • 2、创建torch数据
  • 3、张量的形状
  • 4、张量的索引、切片
  • 5、张量形状的改变
  • 6、张量的广播机制
  • 7、如何将numpy转换成Tensors
  • 8、常用操作
    • 8.1、torch.cat()
    • 8.2、torch.squeeze、torch.unsqueeze
    • 8.3、torch.view

1、认识张量

Tensors(张量)
Tensors张量,与numpy中的ndarray类似,但是在pytorch中,Tensors可以使用GPU进行计算,张量的话可以默认记录计算轨迹,从而方便求导。

2、创建torch数据

torch_1 = torch.eye(4,4)#创建一个4乘4维的张量
torch_2 = torch.zeros(4,4)#创建一个4乘4的全零张量
torch_3 = torch.arange(16).reshape(2,2,-1)#定义一个范围0~15,然后修改维度第一维度有两个,第二维度为2,第三维度-1:自动填充

print(torch_1)
print(torch_2)
print(torch_3)

输出:
Pytorch基础——张量_第1张图片

3、张量的形状

print(torch_1.shape)
print(torch_2.size())

输出:

Pytorch基础——张量_第2张图片

4、张量的索引、切片

print(torch_1[2])#第一维度中的第二个
print(torch_1[:,1])#第一维度全取,第二维度取1
print(torch_3[:,1,:-1])#第一维度全取,第二维度取1,其三维度取到倒数索引为1 的位置

输出:
Pytorch基础——张量_第3张图片

5、张量形状的改变

torch_4 = torch.arange(2).reshape(2,)
torch_5 = torch.arange(2).reshape(2,1)
torch_6 = torch.arange(2).reshape(1,2)

输出:
注意:(2,),,2,1),(1,2)是不同的
Pytorch基础——张量_第4张图片

6、张量的广播机制

解决形状不一致的时候的操作运算

判断是否可以进行广播:

从右往左,只看短的,看是具体的数字否相同或者是否其中一个为1
比如:
(2,3,4)和(1,1,4)————>可以进行广播
(3,4)和(2,1,4)可以
(2,3,4)和(1,2,4)不可以

广播方式:

(3,4)和(1,1,4)————>从左边补齐维度(1,3,4)(1,1,4)————>再看数字,实际上就是从右往左看,只看看短的————>可以

广播以后,就可以进行运算操作:

torch_11 = torch.arange(24).reshape(2,3,4)
torch_12 = torch.arange(4).reshape(1,1,4)
print(torch_11+torch_12)#相同维度上的元素进行相加
"""2"""
torch_21 = torch.arange(24).reshape(2,3,4)
torch_22 = torch.arange(8).reshape(1,2,4)
print(torch_22+torch_21)

输出:第二个例子两个张量不可以进行广播,所以不能进行运算
Pytorch基础——张量_第5张图片

7、如何将numpy转换成Tensors

arr = np.array([[1,2,3],[4,5,6]])
torch_7 = torch.from_numpy(arr)
print(arr,'\n',torch_7)

输出:
Pytorch基础——张量_第6张图片

8、常用操作

8.1、torch.cat()

张量的拼接,非常常用,很重要

  • 第一个参数:元组。拼接的张量放进元组
  • 第二个参数。拼接的轴
torch_8 = torch.arange(8).reshape(2,2,2)
torch_9 = torch.arange(12).reshape(3,2,2)
torch_cat = torch.cat((torch_8,torch_9),0)#拼接第0轴
print(torch_8,'\n',torch_9,'\n',torch_cat)

输出:
Pytorch基础——张量_第7张图片
Pytorch基础——张量_第8张图片

8.2、torch.squeeze、torch.unsqueeze

也很重要,

torch.squeeze 压缩维度,把维度为1 的去掉

torch_squeeze = torch.squeeze(torch_12)#shape(1,1,4)去掉为1的维度
print('torch_squeeze.shape',torch_squeeze.shape)

torch.unsqueeze 增加维度

第一个参数:操作的对象
第二个参数:增加维度的位置——>第几个轴

torch_unsqueeze = torch.unsqueeze(torch_squeeze,1)
print('torch_unsqueeze.shape',torch_unsqueeze.shape)

应用场景:预测的时候使用因为训练的时候是4维的数据(batchsize, c, h,w),预测的时候通过增加一个维度,将图片进行变化(c,h,w)- (1,c,h,w)使得预测数据和训练数据的维度保持一致

Pytorch基础——张量_第9张图片

8.3、torch.view

重构张量

print(torch_8.shape)
torch_view = torch_8.view(-1)#torch_8.shape = (2,2,2)

重构成1维,等价于

torch_reshape = torch_8.reshape(-1)
print('torch_view',torch_view)
print('torch_reshape',torch_reshape)

输出:
Pytorch基础——张量_第10张图片

你可能感兴趣的:(深度学习,pytorch,深度学习,python)