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 中的无维转置的主要内容,如果未能解决你的问题,请参考以下文章

Fortran 重塑 - N 维转置

pytorch 中的常用矩阵操作

PyTorch 入坑八:卷积与转置卷积

转置卷积 Transpose Convolution 动手学深度学习v2 pytorch

转置卷积 Transpose Convolution 动手学深度学习v2 pytorch

上采样下采样以及Pytorch中的卷积与反卷积(转置卷积)方法介绍(conv2d和convTranspose2d)