PyTorch中没有N维转置

时间:2017-06-30 08:07:15

标签: torch pytorch

PyTorch的{​​{1}}函数仅转换2D输入。文档为here

另一方面,Tensorflow的torch.transpose功能允许您转置tf.transpose任意尺寸的张量。

有人可以解释为什么PyTorch没有/不能具有N维转置功能吗?这是否是由于PyTorch中的计算图构造与Tensorflow的Define-then-Run范例的动态特性?

3 个答案:

答案 0 :(得分:9)

在pytorch中它被简单地称为不同。 torch.Tensor.permute允许您在TtororFlow中像tf.transpose一样交换pytorch中的维度。

作为如何将4D图像张量从NHWC转换为NCHW的示例(未经测试,因此可能包含错误):

 for(i in 1:nrow(df)){
    df$distance[i] <- sqrt(abs(df$count1[i] - df$count2[i]) + abs(df$count2[i] - df$count3[i]))
   }

答案 1 :(得分:2)

就像Pytorch 0.3中的以下内容一样:

x = torch.rand(2, 3, 4)
x = x.permute(2, 1, 0)  # transpose size to 4x3x2

答案 2 :(得分:0)

Einops支持任意数量维的详细换位:

from einops import rearrange
x  = torch.zeros(10, 100, 100, 3)
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)