在网上搜transpose的用法,出来的大多是numpy类中的用法,实际上跟torch中的tensor类的transpose方法实现方式是有区别的,
因此在看深度学习网络的代码时,碰到.transpose(1, 2)这种样式的代码时就不知所措了。
为此,小弟亲自一试。代码奉上:
import torch
a=torch.Tensor([[[1,2,3],[2,3,4]],[[3,4,5],[4,5,6]]])
b=a.transpose(1,2)
c=a.transpose(2,1)
print(a.shape)
print(b.shape)
print(c.shape)
print(a)
print(b)
print(c)
输出:
torch.Size([2, 2, 3])
torch.Size([2, 3, 2])
torch.Size([2, 3, 2])
tensor([[[1., 2., 3.],
[2., 3., 4.]],
[[3., 4., 5.],
[4., 5., 6.]]])
tensor([[[1., 2.],
[2., 3.],
[3., 4.]],
[[3., 4.],
[4., 5.],
[5., 6.]]])
tensor([[[1., 2.],
[2., 3.],
[3., 4.]],
[[3., 4.],
[4., 5.],
[5., 6.]]])
------------------------------------
可以看到,.transpose(1, 2)与.transpose(2,1)在实现结果上是没有区别的,因此小伙伴们再碰到类似情况,可以放心的认为就是两个维度的互换啦!