Pytorch的view方法

参考链接:

https://blog.csdn.net/scut_salmon/article/details/82391320

https://www.cnblogs.com/geeksongs/p/15034108.html

结论:Pytorch里的view方法用于改变数据维度,与numpy的reshape方法类似。

一.按照传入数字使数据维度进行转换

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a = torch.arange(1, 17)  # a's shape is (16,)

a.view(4, 4) # output below
tensor([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
[torch.FloatTensor of size 4x4]

a.view(2, 2, 4) # output below
tensor([[[ 1, 2, 3, 4],
[ 5, 6, 7, 8]],

[[ 9, 10, 11, 12],
[13, 14, 15, 16]]])
[torch.FloatTensor of size 2x2x4]

二.传入数字-1,自动对维度进行变换

在某一个维度,我们可以传入数字-1,自动对维度进行计算并变化:

假设我们有一个数据维度为【3,5,2】的tensor,我们想要将其转化为其中两个维度分别为【3,1】,【5,2】,而剩下的第三个维度自动进行计算,那么我们可以使用-1来代替【3,1,10】当中的10,以及用-1来代替转化后【5,2,3】维度当中的数字3.我们可以发现3110=352=523,因此变化后的维度乘积是相等的。

示例

1
2
3
4
5
6
import torch
a=torch.randn(3,5,2)
print(a)
print(a.view(3,1,-1).size())
print(a.view([3,1,-1]).size()) #不管加不加上列表符号,最后reshape的结果是一样的
print(a.view([5,2,-1]).size())

结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
tensor([[[ 1.6498, -0.4354],
[-1.0042, -0.1582],
[ 1.2794, -0.1203],
[ 0.9198, 2.8475],
[ 0.0065, 1.5481]],

[[ 0.7220, -1.1230],
[ 0.2665, -0.6645],
[-0.6159, -0.3833],
[-1.4767, 0.8378],
[-0.3257, 0.2394]],

[[ 0.3784, 0.4233],
[-0.5807, 1.2695],
[ 1.7632, 0.7828],
[ 1.0076, 0.6205],
[ 0.9948, -1.2256]]])
torch.Size([3, 1, 10])
torch.Size([3, 1, 10])
torch.Size([5, 2, 3])

三、使用view可以进行数据降维

只要元素数量能够对应,我们即可使用view来进行数据降维。

示例

1
2
3
4
import torch
a = torch.randn(3,5,2)
print(a.size())
print(a.view([3,-1]).size())

结果

1
2
torch.Size([3, 5, 2])
torch.Size([3, 10])

Pytorch的view方法
https://fulequn.github.io/2021/01/Article202101102/
作者
Fulequn
发布于
2021年1月10日
许可协议