view

在pytorch中view函数的作用为重构张量的维度,相当于numpy中resize()的功能。

a = [1,2,3]
b = [2,3,4]
c = [3,5,5]
d = [4,5,6]
e = np.array([a,b,c,d])
e = torch.from_numpy(e)
print(e.shape)

e = e.view(2,6)
print(e.shape)

e = e.view(3,4)
print(e.shape)

e = e.view(1,-1)
print(e.shape)

Pytorch维度操作-unsqueeze、squeeze、view与permute_深度学习

unsqueeze

作用是用于增加维度,操作是针对于tensor张量,增加一个维数为1的维度。

生成一个张量

a = [1,2,3]
b = [2,3,4]
c = [3,5,5]
d = [4,5,6]

e = np.array([a,b,c,d])
e = torch.from_numpy(e)
print(e)
print(e.shape)

Pytorch维度操作-unsqueeze、squeeze、view与permute_深度学习_02

 unsqueeze的用法通过tensor.unsqueeze(dim)进行维度扩张。dim是维度,如果要扩张第一维就是tensor.unsqueeze(0)

e = e.unsqueeze(0)
print(e)
print(e.shape)

Pytorch维度操作-unsqueeze、squeeze、view与permute_numpy_03

 

如果要在第二维扩张就是tensor.unsqueeze(1)

Pytorch维度操作-unsqueeze、squeeze、view与permute_numpy_04

最后一维就是tensor.unsqueeze(-1) 

Pytorch维度操作-unsqueeze、squeeze、view与permute_指定位置_05

unsqueeze_和unsqueeze实现一样的功能, 区别在于unsqueeze_是in_place操作,即unsqueeze不会对使用unsqueeze的tensor进行改变,想要获取unsqueeze后的值必须赋予个新值,unsqueeze_则会对自己改变 

squeeze

作用是用于压缩维度,操作是针对于tensor张量。与unsqueeze一样,传入参数为维度,只是作用变成了压缩(挤压)维度,去掉一个维数为1的维度。

a = torch.normal(0,1,size=(1,3,4))
print(a)
print(a.shape)
c = a.squeeze(0)
print(c)
print(c.shape)

Pytorch维度操作-unsqueeze、squeeze、view与permute_numpy_06

用tensor.squeeze也可以,传入参数为一个张量,去掉其中为1的维度。

a = torch.squeeze(a)
print(a)
print(a.shape)

 

Pytorch维度操作-unsqueeze、squeeze、view与permute_python_07

如果有多个维数为1的维度,就全部去掉。

a = torch.normal(0,1,size=(1,3,1))
print(a)
print(a.shape)
a = torch.squeeze(a)
print(a)
print(a.shape)

Pytorch维度操作-unsqueeze、squeeze、view与permute_深度学习_08

 如果要去掉指定位置的维度

a = torch.squeeze(a,0)
print(a)
print(a.shape)

Pytorch维度操作-unsqueeze、squeeze、view与permute_深度学习_09

Permute

用于进行维度的调整换位,传入的参数为维度的下标,比如将第1和第2维度进行交换:

a = torch.ones(2,3,4)
print(a.shape)
a = a.permute(1,0,2)
print(a.shape)

 

Pytorch维度操作-unsqueeze、squeeze、view与permute_numpy_10

将最后一维放到第1维,然后其他后移: 

a = torch.ones(2,3,4)
print(a.shape)
a = a.permute(-1,0,1)
print(a.shape)

Pytorch维度操作-unsqueeze、squeeze、view与permute_python_11