PyTorch 中的无维转置
Posted
技术标签:
【中文标题】PyTorch 中的无维转置【英文标题】:No N-dimensional tranpose in PyTorch 【发布时间】:2017-12-04 03:07:23 【问题描述】:PyTorch 的 torch.transpose
函数仅转置 2D 输入。文档是here。
另一方面,Tensorflow 的tf.transpose
函数允许您转置N
任意维度的张量。
有人能解释一下为什么 PyTorch 没有/不能有 N 维转置功能吗?这是由于 PyTorch 中计算图构建的动态特性与 Tensorflow 的 Define-then-Run 范式相比吗?
【问题讨论】:
【参考方案1】:它在 pytorch 中只是简单地称为不同的。 torch.Tensor.permute 将允许您在 pytorch 中交换维度,就像 TensorFlow 中的 tf.transpose 一样。
作为如何将 4D 图像张量从 NHWC 转换为 NCHW 的示例(未经测试,因此可能包含错误):
>>> img_nhwc = torch.randn(10, 480, 640, 3)
>>> img_nhwc.size()
torch.Size([10, 480, 640, 3])
>>> img_nchw = img_nhwc.permute(0, 3, 1, 2)
>>> img_nchw.size()
torch.Size([10, 3, 480, 640])
【讨论】:
【参考方案2】:Einops
支持任意维数的详细转置:
from einops import rearrange
x = torch.zeros(10, 3, 100, 100)
y = rearrange(x, 'b c h w -> b h w c')
x2 = rearrange(y, 'b h w c -> b c h w') # inverse to the first
(同样的代码也适用于 tensorfow)
【讨论】:
以上是关于PyTorch 中的无维转置的主要内容,如果未能解决你的问题,请参考以下文章
转置卷积 Transpose Convolution 动手学深度学习v2 pytorch