View

내일배움캠프 10주차 WIL

수현조 2025. 2. 7. 20:37

다차원 Tensor 곱셈 (Tensor Multiplication)


PyTorch에서 다차원 텐서(Tensor) 곱셈을 수행하는 방법을 정리해줄게!
보통 2D 행렬 곱셈은 torch.matmul()이나 torch.mm()으로 처리하지만,
3D 이상 다차원 텐서에서는 Batch Matrix Multiplication을 활용해야 해.


🔹 1. 기본적인 2D 행렬 곱셈

import torch

A = torch.tensor([[1, 2], [3, 4]])  # (2×2)
B = torch.tensor([[5, 6], [7, 8]])  # (2×2)

C = torch.matmul(A, B)  # 행렬 곱셈
print(C)

출력:

tensor([[19, 22],
        [43, 50]])

➡ torch.matmul(A, B) 또는 A @ B 로 계산 가능


🔹 2. 3D 텐서 곱셈 (Batch Matrix Multiplication)

A = torch.randn(3, 5, 6)  # 3개의 (5×6) 행렬
B = torch.randn(3, 6, 4)  # 3개의 (6×4) 행렬

C = torch.matmul(A, B)  # (3, 5, 4) 크기의 결과 텐서
print(C.shape)  # torch.Size([3, 5, 4])

📌 설명:

  • A는 (3, 5, 6) → 3개의 (5×6) 행렬
  • B는 (3, 6, 4) → 3개의 (6×4) 행렬
  • 결과는 (3, 5, 4)

🔹 3. 다차원 텐서 곱셈

4D 텐서 곱셈

A = torch.randn(2, 3, 5, 6)  # (batch=2, 3, 5, 6)
B = torch.randn(2, 3, 6, 4)  # (batch=2, 3, 6, 4)

C = torch.matmul(A, B)  # (batch=2, 3, 5, 4)
print(C.shape)  # torch.Size([2, 3, 5, 4])

📌 설명:

  • A: (2, 3, 5, 6)
  • B: (2, 3, 6, 4)
  • 마지막 두 차원만 행렬 곱 연산이 적용됨 → (5×6) × (6×4) = (5×4)

🔹 4. einsum()을 이용한 텐서 곱셈

다차원 텐서 곱셈을 더 직관적으로 표현

C = torch.einsum('bijk,bikl->bijl', A, B)
print(C.shape)  # torch.Size([2, 3, 5, 4])

einsum()을 사용하면 차원 연산을 자유롭게 조절 가능!

  • 'bijk, bikl -> bijl'
    • b: 배치 차원
    • i, j, k, l: 각 텐서의 차원
    • (5×6) × (6×4) → (5×4)

🔹 5. 브로드캐스팅을 활용한 곱셈

A = torch.randn(1, 5, 6)  # (1, 5, 6)
B = torch.randn(3, 6, 4)  # (3, 6, 4)

C = torch.matmul(A, B)  # (3, 5, 4)로 브로드캐스팅 적용
print(C.shape)  # torch.Size([3, 5, 4])

📌 설명:

  • A의 첫 번째 차원이 1이라서 자동으로 3으로 확장됨
  • 브로드캐스팅을 통해 연산 가능!

🚀 결론

연산 방식 연산 함수 설명

2D 행렬 곱 torch.matmul(A, B) (m×n) × (n×p) = (m×p)
3D Batch 곱 torch.matmul(A, B) (batch, m, n) × (batch, n, p) = (batch, m, p)
4D 이상 곱 torch.matmul(A, B) 마지막 두 차원만 행렬 곱 수행
einsum torch.einsum('bijk,bikl->bijl', A, B) 차원 맞춤 자유
브로드캐스팅 torch.matmul(A, B) 자동 확장

 

'TIL' 카테고리의 다른 글

내일배움캠프 본캠프 49일차  (0) 2025.02.07
내일배움캠프 본캠프 48일차  (0) 2025.02.06
내일배움캠프 본캠프 47일차  (0) 2025.02.05
내일배움캠프 본캠프 46일차  (0) 2025.02.04
내일배움캠프 9주차 WIL  (0) 2025.01.31
Share Link
reply
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28