1. 作用
两者都可以对tensor矩阵进行维度变化,例如:原 x.shape = [batch_size, c, h, w], 使用 x.view(batch_size, c, w, h), 即可将x的维度变换成:[batch_size, c, w, h]。
也可以使用,x.permute(batch_size, c, w, h)将维度变换成:[batch_size, c, w, h]。
但是两者实现维度变换的原理是完全不一样的
2. view()的实现原理
Step1: 先按序将数据展开;
Step2: 再按照view(a, b, c)中的a,b,c进行维度填充。
例如:
a = torch.tensor([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
b = a.view(4,3)
b = tensor([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
其变换过程如图:
其索引变换如下:
3. permute()的实现原理
该函数是通过交换对应维度的index.
例如:X.shape = [2, 2, 3], 其中一个元素
x
(
1
,
1
,
2
)
x_{(1, 1, 2)}
x(1,1,2),经过X.permute(0, 2, 1)后,那么该元素的坐标则变为
x
(
1
,
2
,
1
)
x_{(1, 2, 1)}
x(1,2,1)
a = torch.tensor([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
b = a.permute(0,2,1)
b = tensor([[[ 1, 4],
[ 2, 5],
[ 3, 6]],
[[ 7, 10],
[ 8, 11],
[ 9, 12]]])
如图:
其坐标变换如下:
参考资料:
https://zhuanlan.zhihu.com/p/88311093