View
✅ 다차원 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 |
reply