Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

PyTorch 텐서 크기 조정하기: view() 메서드 완벽 가이드

PyTorch에서 텐서(tensor)의 크기를 조정하려면 .view() 메서드를 사용합니다. 이 메서드를 이용하면 텐서의 차원을 늘리거나 줄일 수 있는데, 단 한 가지 중요한 조건이 있습니다. 바로 크기 조정 전후의 전체 요소(element) 개수가 반드시 동일해야 한다는 점입니다.

텐서 크기 조정 절차

  • 필요한 라이브러리를 임포트합니다. 아래 모든 Python 예제에서 필요한 라이브러리는 torch이며, 미리 설치되어 있어야 합니다.

  • PyTorch 텐서를 생성하고 출력합니다.

  • 생성한 텐서에 .view()를 적용하여 새로운 크기를 지정하고, 그 결과를 변수에 할당합니다. 이름 그대로 .view()는 원본 텐서 자체를 변경하지 않고 새로운 크기의 뷰(view)만 반환합니다.

  • 마지막으로 크기가 조정된 텐서를 출력합니다.

예제 1: 1차원 텐서를 2x3으로 변형

# PyTorch에서 텐서 크기를 조정하는 Python 프로그램
# 라이브러리 임포트
import torch

# 텐서 생성
T = torch.Tensor([1, 2, 3, 4, 5, 6])
print(T)

# T를 2x3으로 크기 조정
x = T.view(2,3)
print("크기 조정 후 텐서:\n",x)

# 다른 방식으로 T를 2x3으로 크기 조정 (-1 사용)
x = T.view(-1,3)
print("크기 조정 후 텐서:\n",x)

# 또 다른 방식으로 T를 2x3으로 크기 조정 (-1 사용)
x = T.view(2,-1)
print("크기 조정 후 텐서:\n",x)

실행 결과

위의 Python 3 코드를 실행하면 다음과 같은 결과가 출력됩니다.

tensor([1., 2., 3., 4., 5., 6.])
Tensor after resize:
tensor([[1., 2., 3.],
        [4., 5., 6.]])
Tensor after resize:
tensor([[1., 2., 3.],
        [4., 5., 6.]])
Tensor after resize:
tensor([[1., 2., 3.],
        [4., 5., 6.]])

예제 2: 4x3 텐서를 다양한 형태로 변형

# 라이브러리 임포트
import torch

# 4x3 형태의 텐서 생성
T = torch.Tensor([[1,2,3],[2,1,3],[2,3,5],[5,6,4]])
print(T)

# T를 3x4로 크기 조정
x = T.view(-1,4)
print("크기 조정 후 텐서:\n",x)

# 다른 방식으로 T를 3x4로 크기 조정
x = T.view(3,-1)
print("크기 조정 후 텐서:\n",x)

# T를 2x6으로 크기 조정
x = T.view(2,-1)
print("크기 조정 후 텐서:\n",x)

실행 결과

위의 Python 3 코드를 실행하면 다음과 같은 결과가 출력됩니다.

tensor([[1., 2., 3.],
        [2., 1., 3.],
        [2., 3., 5.],
        [5., 6., 4.]])
Tensor after resize:
tensor([[1., 2., 3., 2.],
        [1., 3., 2., 3.],
        [5., 5., 6., 4.]])
Tensor after resize:
tensor([[1., 2., 3., 2.],
        [1., 3., 2., 3.],
        [5., 5., 6., 4.]])
Tensor after resize:
tensor([[1., 2., 3., 2., 1., 3.],
        [2., 3., 5., 5., 6., 4.]])

-1 인자의 의미와 활용 팁

예제에서 볼 수 있듯이 .view()의 인자 중 하나에 -1을 넣으면, 해당 차원의 크기를 PyTorch가 나머지 차원을 기준으로 자동으로 계산해 줍니다. 예를 들어 요소가 12개인 텐서에 T.view(-1, 4)를 적용하면 첫 번째 차원이 자동으로 3으로 결정되어 3x4 형태가 됩니다.

다만 주의할 점은 -1은 한 번의 호출에 최대 하나의 차원에만 사용할 수 있다는 것입니다. 두 개 이상의 차원에 -1을 지정하면 오류가 발생합니다. 또한 원본 텐서와 요소 개수가 맞지 않는 형태를 지정하면 RuntimeError가 발생하므로, 항상 전체 요소 수를 유지하도록 설계해야 합니다.