상세 컨텐츠

본문 제목

[Dive into Deep Learning / 2주차] Tensor Manipulation

심화 스터디/Dive into Deep Learning

by 나는 은쪽이 2022. 9. 25. 19:20

본문

작성자 : 16기 하예은

본 포스팅은 다음 자료들을 참고하여 작성되었습니다.

- https://youtu.be/b-672791HgA

PyTorch documentation — PyTorch 1.12 documentation

- Broadcasting — NumPy v1.23 Manual


 

1. torch.mm()

  • torch.mm(input, mat2, *, out=None)
  • input과 mat2의 행렬 곱을 연산함
  • input과 mat2는 2D tensor, 즉 행렬이어야 함

 

 

 

2. torch.bmm()

  • torch.bmm(input, mat2, *, out=None)
  • input과 mat2의 행렬곱을 동시에 병렬로 연산함
  • input과 mat2는 같은 수의 행렬을 가지는 3D tensor여야 함

 

 

 

3. torch.mul()

  • torch.mul(input, other, *, out=None)
  • input과 other의 elementwise 곱셈
  • other는 tensor 또는 scalar

 

tensor * scalar

 

tensor * tensor

 

4. torch.matmul()

  • torch.matmul(input, other, *, out=None)
  • tensor의 차원에 따라 결과값이 달라짐

 

1. 1차원 * 1차원 : dot product 반환 

 

 

 

2. 2차원 * 2차원 : 행렬 곱 반환

 

 

 

3. 1차원 * 2차원 

 

 

 

4. 2차원 * 1차원

 

 

 

5. 1차원 이상 * 3차원 이상 : batched matrix multiplication

 

 

 

 

5. Broadcasting

  • torch.mul()과 torch.matmul()은 broadcasting을 지원함
  • 정의 : "the smaller array is broadcast across the larger array so that they have compatible shapes"

 

 

  • 조건 : 두 배열이 뒤에서부터 대응하는 축의 크기가 동일하거나 1이어야 함

 

  • 원리 : broadcastable한 텐서 x와 y에 대해서 x와 y의 차원이 다르다면 차원이 더 작은 텐서를 이어붙여서(prepend) 길이를 같게 만들어준다.

 

 

 

6. Operator

  • * 연산자 : 원소별 곱
  • @ 연산자 : 행렬곱(여러 행렬 곱셈도 가능)

 

관련글 더보기

댓글 영역