torch.stack
은 리스트 또는 배열 형태의 텐서들을 하나의 torch.Tensor
로 결합해주는 함수. 입력 텐서들을 새로운 차원으로 쌓는 역할.
torch.stack
torch.stack
은 여러 텐서를 주어진 새 축(dim)을 따라 연결. import torch
# 텐서 리스트
tensor_list = [torch.tensor([1, 2]), torch.tensor([3, 4]), torch.tensor([5, 6])]
# torch.stack으로 쌓기
result = torch.stack(tensor_list)
print(result)
# 출력:
# tensor([[1, 2],
# [3, 4],
# [5, 6]])
print(result.shape)
# 출력: torch.Size([3, 2]) # (새로운 축, 기존 차원)
tensor_list
는 크기 [2]
를 가진 텐서 3개로 구성됨.torch.stack
은 리스트의 요소를 새로운 첫 번째 차원(디폴트 dim=0
)으로 쌓아 크기 [3, 2]
의 텐서를 생성함.torch.stack
vs torch.cat
둘 다 텐서를 연결하지만, 동작 방식이 다르다.
torch.stack
: 새로운 차원을 생성해서 텐서를 쌓음.torch.cat
: 기존 차원에서 텐서를 이어붙임.import torch
tensor_list = [torch.tensor([1, 2]), torch.tensor([3, 4]), torch.tensor([5, 6])]
# torch.stack
stacked = torch.stack(tensor_list)
print(stacked)
# tensor([[1, 2],
# [3, 4],
# [5, 6]])
# torch.cat
concatenated = torch.cat(tensor_list)
print(concatenated)
# tensor([1, 2, 3, 4, 5, 6])
torch.stack
: 차원이 추가되어 [3, 2]
.torch.cat
: 차원이 추가되지 않고, 결과 크기가 [6]
.torch.stack
의 축 변경새로운 축(dim
)의 위치를 지정할 수 있습니다.
tensor_list = [torch.tensor([1, 2]), torch.tensor([3, 4]), torch.tensor([5, 6])]
# Default (dim=0)
result1 = torch.stack(tensor_list, dim=0)
print(result1.shape) # torch.Size([3, 2])
# dim=1
result2 = torch.stack(tensor_list, dim=1)
print(result2)
# tensor([[1, 3, 5],
# [2, 4, 6]])
print(result2.shape) # torch.Size([2, 3])
모든 텐서의 크기가 같아야 함:
torch.stack
은 새로운 차원을 생성하므로, 리스트의 모든 텐서가 같은 크기를 가져야 함.tensors = [torch.tensor([1, 2]), torch.tensor([3, 4, 5])]
torch.stack(tensors) # 오류 발생: RuntimeError
데이터 타입도 동일해야 함:
list
를 torch.Tensor
로 바꾸는 경우torch.tensor
를 사용하면 간단히 리스트를 텐서로 변환할 수 있습니다.
# 리스트를 텐서로 변환
my_list = [[1, 2], [3, 4]]
tensor = torch.tensor(my_list)
print(tensor)
# tensor([[1, 2],
# [3, 4]])
torch.tensor
는 리스트를 텐서로 직접 변환.torch.stack
은 텐서 리스트를 새로운 차원으로 쌓아서 하나의 텐서를 만듦.torch.stack
은 텐서 리스트를 새로운 축(dim)으로 쌓아주는 역할.torch.tensor
를 사용하고, 여러 텐서를 하나로 합칠 때는 torch.stack
또는 torch.cat
을 적절히 선택.