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