전공 공부/데이터 분석

파이토치 기초

상솜공방 2024. 2. 3. 15:50

차원 증가

unsqueeze() 메소드 사용
unsqueeze() 메소드는 지정된 위치에 새로운 차원을 추가합니다. 이 메소드는 차원을 추가할 위치의 인덱스를 인자로 받습니다. PyTorch에서 차원의 인덱스는 0부터 시작합니다. 따라서, 배치 차원을 가장 앞에 추가하려면 인덱스 0의 위치에 차원을 추가하면 됩니다.

import torch

# [3, 256, 256] 차원을 가지는 텐서 생성
image_tensor = torch.randn(3, 256, 256)

# 배치 차원을 추가하여 [1, 3, 256, 256]으로 변경
image_tensor_unsqueezed = image_tensor.unsqueeze(0)

print(image_tensor_unsqueezed.shape)  # 결과: torch.Size([1, 3, 256, 256])

view() 메소드 사용

view() 메소드를 사용하여 텐서의 차원을 재구성할 수도 있습니다. 이 경우, 원하는 모든 차원을 명시적으로 지정해야 합니다. 단, 이 함수는 차원을 변경하기 위해 연속적인 텐서 배열로 만들어줘야 하므로, tensor.contiguous().view(~)를 사용해야 할 수도 있다. 혹은 아래처럼 reshape() 메소드를 사용해도 된다.

image_tensor_viewed = image_tensor.view(1, 3, 256, 256)

reshape() 메소드 사용

reshape() 메소드는 view()와 유사하게 텐서의 차원을 변경합니다. 다만, 내부적으로 메모리를 새롭게 할당할 수 있어 더 유연합니다.

image_tensor_reshaped = image_tensor.reshape(1, 3, 256, 256)