목차
01) 텐서 결합 연산
PyTorch에서 텐서를 결합하는 두 가지 주요 방법은 stack
과 cat
(concatenate)입니다.
1.1 torch.cat()
import torch
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
c = torch.cat((a, b))
print(c)# 출력: tensor([1, 2, 3, 4, 5, 6])
cat
은 지정된 차원을 따라 텐서들을 연결합니다. 기본적으로 0번 차원을 따라 연결합니다.
1.2 torch.stack()
d = torch.stack((a, b))
print(d)# 출력: tensor([[1, 2, 3],# [4, 5, 6]])
stack
은 새로운 차원을 만들어 그 차원을 따라 텐서들을 쌓습니다.
언제 무엇을 사용해야 할까요? 기존 차원을 따라 텐서를 이어 붙이려면 cat
을, 새로운 차원을 만들어 텐서를 쌓으려면 stack
을 사용하면 됩니다.
02) 텐서 확장 연산
2.1 torch.expand()
a = torch.tensor([1, 2, 3])
b = a.expand(3, -1)
print(b)# 출력: tensor([[1, 2, 3],# [1, 2, 3],# [1, 2, 3]])
expand
는 텐서의 크기를 늘리지만, 실제로 메모리를 복사하지 않습니다.
2.2 torch.repeat()
c = a.repeat(3, 1)
print(c)# 출력: tensor([[1, 2, 3],# [1, 2, 3],# [1, 2, 3]])
repeat
는 텐서의 내용을 실제로 복사하여 반복합니다.
Attention mask에서는 주로 expand
를 사용합니다.
예를 들어:
mask = torch.tensor([[1, 0, 0], [1, 1, 0], [1, 1, 1]])
expanded_mask = mask.unsqueeze(0).expand(5, -1, -1)
이렇게 하면 배치 크기만큼 마스크를 효율적으로 확장할 수 있습니다.
03) 기본 산술 연산
PyTorch는 기본적인 산술 연산을 위한 함수와 연산자를 제공합니다:
- 덧셈:
+
또는torch.add()
- 뺄셈:
-
또는torch.sub()
- 곱셈:
*
또는torch.mul()
- 나눗셈:
/
또는torch.div()
예를 들어:
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
print(a + b)# 출력: tensor([5, 7, 9])
print(torch.add(a, b))# 같은 결과
04) 비교 연산
텐서 간 비교를 위해 다음과 같은 함수들을 사용할 수 있습니다:
torch.eq()
: 같음torch.ne()
: 같지 않음torch.lt()
: 작음torch.gt()
: 큼torch.le()
: 작거나 같음torch.ge()
: 크거나 같음
예:
a = torch.tensor([1, 2, 3])
b = torch.tensor([2, 2, 2])
print(torch.gt(a, b))# 출력: tensor([False, False, True])
04) 행렬 연산
행렬 곱셈을 위해 torch.matmul()
이나 torch.mm()
을 사용할 수 있습니다:
a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6], [7, 8]])
print(torch.matmul(a, b))# 출력: tensor([[19, 22],# [43, 50]])
matmul
은 브로드캐스팅을 지원하므로 배치 연산에 유용하고, mm
은 2D 텐서에만 사용할 수 있습니다.
05) 논리 연산
논리 연산을 위해 다음 함수들을 사용할 수 있습니다:
torch.logical_and()
torch.logical_or()
torch.logical_not()
예:
a = torch.tensor([True, False, True])
b = torch.tensor([False, False, True])
print(torch.logical_and(a, b))# 출력: tensor([False, False, True])
05) 수학 연산
PyTorch는 다양한 수학 함수를 제공합니다:
torch.pow()
: 거듭제곱torch.sqrt()
: 제곱근torch.exp()
: 지수 함수torch.log()
: 자연로그torch.sin()
,torch.cos()
,torch.tan()
: 삼각함수
예:
a = torch.tensor([1, 2, 3])
print(torch.pow(a, 2))# 출력: tensor([1, 4, 9])
05) 인플레이스(Inplace) 연산
인플레이스 연산은 텐서를 직접 수정합니다. 함수 이름 뒤에 '_'를 붙여 사용합니다:
a = torch.tensor([1, 2, 3])
a.add_(1)
print(a)# 출력: tensor([2, 3, 4])
주의: 인플레이스 연산은 메모리 효율적이지만, autograd를 사용할 때 주의해야 합니다. 그래디언트 계산에 문제를 일으킬 수 있기 때문입니다.
PyTorch의 텐서 연산을 마스터하면 효율적이고 읽기 쉬운 코드를 작성할 수 있습니다. 이 포스트에서 다룬 연산들을 잘 활용하여 여러분의 딥러닝 프로젝트를 한 단계 발전시켜 보세요!
추가 자료
'AI > Naver_Boostcamp AI Tech' 카테고리의 다른 글
머신러닝 라이프사이클: 인공지능 프로젝트의 전체 과정 이해하기 (0) | 2024.08.12 |
---|---|
텐서 연산 마스터하기: 기본부터 고급까지(2) (# 3일차-2) (0) | 2024.08.07 |
네부캠 AI tech 2일차 학습정리(Pytorch의 Tensor) (0) | 2024.08.06 |
CPU와 GPU에서의 Tensor (1) | 2024.08.06 |
네부캠 AI tech 1일차 학습정리(Pytorch의 기본) (0) | 2024.08.05 |