Pytorchの順列機能
Pytorchs Permute Function
1.主な機能:テンソル次元の変換
例:
import torch x = torch.randn(2, 3, 5) print(x.size()) print(x.permute(2, 0, 1).size()) >>>torch.Size([2, 3, 5]) >>>torch.Size([5, 2, 3])
2.転置と順列の類似点と相違点を紹介します。
同じ:テンソル次元を転置する
違い:permute関数は任意の高次元行列を転置できますが、torch.permute()呼び出しメソッドはありません
torch.randn(2,3,4,5).permute(3,2,0,1).shape >>>torch.Size([5, 4, 2, 3])
転置は2D行列の転置のみを操作でき、2次元を超えて操作することはできないため、複数の次元の転置を実現したい場合は、1回限りの使用が可能です。
順列、転置を複数回使用することもできます
torch.randn(2,3,4,5).transpose(3,0).transpose(2,1).transpose(3,2).shape >>>torch.Size([5, 4, 2, 3])
3.順列機能と隣接および表示機能との関連
連続:ビューは連続変数にのみ作用できます。表示前に転置、順列などが呼び出された場合は、呼び出す必要があります
contiguous()は、連続したコピーを返します
つまり、転置や置換などの操作により、メモリ内でテンソルが不連続になるため、表示する場合はテンソルを連続にする必要があります。
説明は次のとおりです。一部のテンソルはメモリのブロック全体を占有しませんが、異なるデータブロックで構成され、テンソルのview()操作はメモリのブロック全体に依存します。このとき、contiguous()の関数のみを実行する必要があり、テンソルはメモリ内の連続分布の形式になります
ternsorが隣接しているかどうかを判断するには、torch.Tensor.is_contiguous()関数を呼び出します。
import torch x = torch.ones(10, 10) x.is_contiguous() # True x.transpose(0, 1).is_contiguous() # False x.transpose(0, 1).contiguous().is_contiguous() # True
もう1つ:pytorchの最新バージョン0.4では、torch.reshape()が追加されました。これはnumpy.reshape()に似ており、tensor.contiguous()。view()とほぼ同等であり、テンソルの必要性を節約します。 view()変換の前にcontiguous()を呼び出す方法
3.機能の並べ替えと表示
import torch import numpy as np a=np.array([[[1,2,3],[4,5,6]]]) unpermuted=torch.tensor(a) print(unpermuted.size()) # ——> torch.Size([1, 2, 3]) permuted=unpermuted.permute(2,0,1) print(permuted.size()) # ——> torch.Size([3, 1, 2]) view_test = unpermuted.view(1,3,2) print(view_test.size()) >>>torch.Size([1, 2, 3]) torch.Size([3, 1, 2]) torch.Size([1, 3, 2])