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가 발생하므로, 항상 전체 요소 수를 유지하도록 설계해야 합니다.