logo

파이토치 텐서의 차원, 크기 다루기 📂머신러닝

파이토치 텐서의 차원, 크기 다루기

정의

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크기라고 하자.

  • AAnn차원 텐서라고 한다.

    aia_{i}는 각각 ii번째 차원의 크기이며 11보다 큰 정수이다. 파이썬이므로 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.]])