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:ビューは隣接する変数にのみ作用します。ビューの前に転置、置換などを呼び出す場合、呼び出す必要があります。
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
さらに、pytorchの最新バージョン0.4では、関数のnumpy.reshape()に類似したtorch.reshape()が追加されています。これは、tensor.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])