PyTorchテンソルの次元とサイズの扱い方
定義
$A$をパイトーチのテンソルとしよう。
次の順序ペア$(a_{0}, a_{1}, \dots, a_{n-1})$を$A$のサイズと呼ぶ。
$$ \text{A.size() = torch.Size}([a_{0}, a_{1}, \dots, a_{n-1} ]) $$
$\prod \limits_{i=0}^{n-1} a_{i} = a_{0} \times a_{1} \times \cdots a_{n-1}$を$A$の大きさとしよう。
$A$を**$n$次元テンソル**と呼ぶ。
$a_{i}$はそれぞれ$i$番目の次元の大きさで、$1$より大きい整数だ。Pythonなので、$0$番目の次元から始まることに注意しよう。
>>> A = torch.ones(2,3,4)
tensor([[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]])
例えば、このようなテンソル$A$の次元は$3$、大きさは$24=2 \cdot 3 \cdot 4$、サイズは$(2,3,4)$だ。
.dim()
, .ndim
テンソルの次元を返す。
>>> A.dim()
3
>>> A.ndim
3
.shape
, .size()
テンソルのサイズを返す。
>>> A.shape
torch.Size([2, 3, 4])
>>> A.shape[1]
3
>>> A.size()
torch.Size([2, 3, 4])
>>> A.size(2)
4
.view()
, .reshape()
テンソルの大きさを保持しながらサイズを変える。
引数に$-1$を使うと、自動的に大きさが合わせられる。例えば、以下の例のように、$(2,3,4)$サイズのテンソルを.view(4,-1)
のように変更すると、$(4,6)$サイズに変わる。
>>> A.reshape(8,3)
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
>>> A.view(3,-1)
tensor([[1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1.]])
>>> A.view(-1,4)
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])