logo

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

PyTorchテンソルの次元とサイズの扱い方

定義

AAをパイトーチのテンソルとしよう。

  • 次の順序ペア(a0,a1,,an1)(a_{0}, a_{1}, \dots, a_{n-1})AAサイズと呼ぶ。

    A.size() = torch.Size([a0,a1,,an1]) \text{A.size() = torch.Size}([a_{0}, a_{1}, \dots, a_{n-1} ])

  • i=0n1ai=a0×a1×an1\prod \limits_{i=0}^{n-1} a_{i} = a_{0} \times a_{1} \times \cdots a_{n-1}AA大きさとしよう。

  • AAを**nn次元テンソル**と呼ぶ。

    aia_{i}はそれぞれii番目の次元の大きさで、11より大きい整数だ。Pythonなので、00番目の次元から始まることに注意しよう。

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

例えば、このようなテンソルAAの次元は33、大きさは24=23424=2 \cdot 3 \cdot 4、サイズは(2,3,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-1を使うと、自動的に大きさが合わせられる。例えば、以下の例のように、(2,3,4)(2,3,4)サイズのテンソルを.view(4,-1)のように変更すると、(4,6)(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.]])