web-dev-qa-db-ja.com

PyTorchでの無次元転置

PyTorchのtorch.transpose関数は、2D入力のみを転置します。ドキュメントは here です。

一方、Tensorflowのtf.transpose関数を使用すると、Nの任意の次元のテンソルを転置できます。

誰かがPyTorchがN次元の転置機能を持たない/持たない理由を説明できますか?これは、PyTorchとTensorflowの定義後実行パラダイムでの計算グラフ作成の動的な性質によるものですか?

11
jhuang

Pytorchでは単に別の呼び方をしています。 torch.Tensor.permute を使用すると、TensorFlowのtf.transposeと同様に、pytorchで次元を交換できます。

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])
12
etarion

pytorch 0.3の次のように:

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

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でも機能します)

0
Alleo