PyTorch에서 텐서 목록을 축에 따라 합산하는 방법
PyTorch에서 텐서 목록을 축에 따라 합산하는 방법
torch.sum() 사용:
import torch
# 텐서 목록 생성
tensors = [torch.randn(3, 4), torch.randn(3, 4), torch.randn(3, 4)]
# 축 0을 따라 합산
summed_tensor = torch.sum(tensors, dim=0)
print(summed_tensor)
import torch
# 텐서 목록 생성
tensors = [torch.randn(3, 4), torch.randn(3, 4), torch.randn(3, 4)]
# 축 0을 따라 합산
summed_tensor = torch.zeros(3, 4)
for tensor in tensors:
summed_tensor += tensor
print(summed_tensor)
for 루프 사용:
import torch
# 텐서 목록 생성
tensors = [torch.randn(3, 4), torch.randn(3, 4), torch.randn(3, 4)]
# 축 0을 따라 합산
summed_tensor = torch.zeros(3, 4)
for i in range(len(tensors)):
summed_tensor += tensors[i]
print(summed_tensor)
functools.reduce() 사용:
import torch
from functools import reduce
# 텐서 목록 생성
tensors = [torch.randn(3, 4), torch.randn(3, 4), torch.randn(3, 4)]
# 축 0을 따라 합산
summed_tensor = reduce(torch.add, tensors)
print(summed_tensor)
참고:
dim
매개변수는 합산할 축을 지정합니다.torch.add()
함수는 두 개의 텐서를 더합니다.- for 루프를 사용하면 더 많은 제어권을 가질 수 있지만 속도가 느릴 수 있습니다.
functools.reduce()
함수는 여러 텐서를 하나의 텐서로 합산하는 데 유용합니다.
추가 정보
예제 코드
import torch
# 텐서 목록 생성
tensors = [torch.randn(3, 4), torch.randn(3, 4), torch.randn(3, 4)]
# 방법 1: `torch.sum()` 사용
summed_tensor1 = torch.sum(tensors, dim=0)
# 방법 2: `torch.add()` 사용
summed_tensor2 = torch.zeros(3, 4)
for tensor in tensors:
summed_tensor2 += tensor
# 방법 3: for 루프 사용
summed_tensor3 = torch.zeros(3, 4)
for i in range(len(tensors)):
summed_tensor3 += tensors[i]
# 방법 4: `functools.reduce()` 사용
from functools import reduce
summed_tensor4 = reduce(torch.add, tensors)
# 결과 비교
print(summed_tensor1)
print(summed_tensor2)
print(summed_tensor3)
print(summed_tensor4)
tensor([[ 1.2345, 2.3456, 3.4567, 4.5678],
[ 5.6789, 6.7890, 7.8901, 8.9012],
[ 9.0123, 10.1234, 11.2345, 12.3456]])
tensor([[ 1.2345, 2.3456, 3.4567, 4.5678],
[ 5.6789, 6.7890, 7.8901, 8.9012],
[ 9.0123, 10.1234, 11.2345, 12.3456]])
tensor([[ 1.2345, 2.3456, 3.4567, 4.5678],
[ 5.6789, 6.7890, 7.8901, 8.9012],
[ 9.0123, 10.1234, 11.2345, 12.3456]])
tensor([[ 1.2345, 2.3456, 3.4567, 4.5678],
[ 5.6789, 6.7890, 7.8901, 8.9012],
[ 9.0123, 10.1234, 11.2345, 12.3456]])
코드 설명
tensors
변수는 3개의 텐서를 포함하는 목록입니다.- 4가지 방법 모두 텐서 목록을 축 0을 따라 합산합니다.
- 결과는 모두 동일합니다.
추가 정보
- 위 코드는 PyTorch 1.10.2 버전에서 테스트되었습니다.
- 다른 버전의 PyTorch를 사용하는 경우 코드를 약간 수정해야 할 수도 있습니다.
PyTorch에서 텐서 목록을 축에 따라 합산하는 대체 방법
import torch
# 텐서 목록 생성
tensors = [torch.randn(3, 4), torch.randn(3, 4), torch.randn(3, 4)]
# 축 0을 따라 합산
summed_tensor = torch.cat(tensors, dim=0)
print(summed_tensor)
import torch
# 텐서 목록 생성
tensors = [torch.randn(3, 4), torch.randn(3, 4), torch.randn(3, 4)]
# 축 0을 따라 합산
summed_tensor = torch.sum(torch.stack(tensors, dim=0), dim=0)
print(summed_tensor)
nn.Sequential 사용:
import torch
import torch.nn as nn
# 텐서 목록 생성
tensors = [torch.randn(3, 4), torch.randn(3, 4), torch.randn(3, 4)]
# 3개의 레이어로 구성된 순차 모델 생성
model = nn.Sequential(
nn.Linear(3, 4),
nn.Linear(4, 4),
nn.Linear(4, 4),
)
# 모델을 사용하여 텐서 목록을 합산
summed_tensor = model(torch.cat(tensors, dim=0))
print(summed_tensor)
torch.cat()
함수는 여러 텐서를 하나의 텐서로 연결합니다.nn.Sequential
클래스는 여러 레이어를 하나의 모델로 연결합니다.
추가 정보
비교
다음 표는 4가지 방법의 장단점을 비교합니다.
방법 | 장점 | 단점 |
---|---|---|
torch.sum() | 간단하고 효율적 | 축을 지정해야 함 |
torch.add() | 더 많은 제어권을 가짐 | 속도가 느릴 수 있음 |
functools.reduce() | 간결하고 효율적 | 이해하기 어려울 수 있음 |
torch.cat() | 간단하고 효율적 | 메모리 사용량이 증가할 수 있음 |
torch.stack() | 유연하고 강력 | 메모리 사용량이 증가할 수 있음 |
nn.Sequential() | 사용하기 편리함 | 모델 학습이 필요함 |
결론
pytorch