728x90
반응형
※ 본 게시물에 사용된 내용의 출처는 대다수 <펭귄브로의 3분 딥러닝-파이토치맛>에서 사용된 자료이며, 개인적인 의견과 해석이 추가된 부분도 존재합니다. 그림의 경우 교재를 따라 그리거나, 제 임의대로 추가 수정한 부분도 존재합니다. 저 역시도 공부하고자 포스팅한 게시물이니, 잘못된 부분은 댓글로 알려주시면 감사하겠습니다.
- Tensor 연산
Tensor
- 텐서(Tensor) : 파이토치에서 다양한 수식을 계산하는데 사용하는 기본적 자료구조(행렬, 벡터 구조)
- 차원(랭크)이 0 : 숫자가 1개 ==> 스칼라(scalar)
- 차원(랭크)이 1 : 일렬로 숫자를 나열 ==> 벡터(vector)
- 차원(랭크)이 2 : 숫자를 가로, 세로로 나열 ==> 행렬(matrix)
- 차원(랭크)이 N>2: N차원 Tensor
[사용법]
import torch # 파이토치 임포트
x = torch.tensor([[1,2,3],[4,5,6],[7,8,9]]) # 3X3 텐서 선언
print(x) # x 텐서 출력
print("Size:", x.size())
print("Shape:",x.shape)
print("랭크(차원):",x.ndimension())
경험 상 딥러닝 연산 과정 중 특정 Attention Layer 또는 데이터 간의 합성곱을 수행할 때 각 Tensor가 서로 다른 형태일 경우, 다음과 같이 unsqueeze를 통해 차원을 늘린 뒤 곱하고, 이후에 squeeze로 불필요한것을 다시 삭제한 뒤 FC에 넣는 형태로 많이 사용된다.
x = torch.unsqueeze(x, 0) # 텐서 차원 늘리기 (dim = 0번째 자리에 차원 추가)
print(x)
print("Size:", x.size())
print("Shape:",x.shape)
print("랭크(차원):", x.ndimension())
x = torch.squeeze(x) # 크기가 1인 차원들을 삭제하여 차원 줄이기
print(x)
print("Size:", x.size())
print("Shape:",x.shape)
print("랭크(차원):", x.ndimension())
이 외에도 view()함수를 통해 직접 모양을 변경할 수 있다.
x = x.view(9)
print(x)
print("Size:", x.size())
print("Shape:",x.shape)
print("랭크(차원):", x.ndimension())
텐서 간 행렬곱
- A의 열 수와 B의 행 수는 동일해야 한다.
- 행렬곱 A x B의 결과 행렬의 행 개수는 A와 같고, 열의 개수는 B와 같다.
import torch
w = torch.randn(5,3, dtype=torch.float)
x = torch.tensor([[1.0, 2.0],[3.0, 4.0],[5.0, 6.0]])
print('w size', w.size())
print('x size', x.size())
print('w :', w)
print('x :', x)
b = torch.randn(5,2, dtype=torch.float)
print('b size:', b.size())
print('b:', b)
wx = torch.mm(w, x)
print('wx size:',wx.size())
print('wx:', wx)
result = wx+b
print('result size:', result.size())
print('result:', result)
728x90
반응형