logo

PyTorchテンソルの次元とサイズの扱い方 📂機械学習

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