
635
17
기초부터 만드는 신경망
결과로
b
크기의 벡터를 반환합니다. 해당 벡터의
k
번째 위치에는
a
[
k
,
i
]
b
[
i
,
j
]
c
[
k
,
j
]
를
합산한 값이 들어갑니다. 이 표기법은 배치를 표현하는 등 더 많은 차원이 존재할 때 특히 편리
합니다. 가령 배치가 둘인 행렬에서 배치별 행렬의 곱셈을 계산하려면 다음과 같이 표현합니다.
torch.einsum(‘bik,bkj->b’, x, y)
matmul
구현에
einsum
을 사용해보죠. 그리고 실행에 걸린 시간을 다시 측정합니다.
>>> %timeit -n 20 t5 = matmul(m1,m2)
68.7 µs ± 4.06 µs per loop (mean ± std. dev. of 7 runs, 20 loops each)
보다시피 실용적일 뿐만 아니라
빠릅니다.
einsum
은
C
++ 및
CUDA
를 자세히 모르더
라도 파이토치에서 사용자 정의 연산을 가장 빠르게 수행하는 방법으로 자주 사용합니다(‘밑바
닥부터 행렬 곱셈 만들기 (
17
.
1
.
2
)’의 결과에서 본 최적화된
CUDA
용 코드만큼 빠르지는 않습
니다 ).
행렬의 곱셈을 밑바닥부터 구현하는 방법을 터득했습니다. 이제는 행렬의 곱셈을 사용하는 신
경망의 순전파와 역전파로 신경망을 구축할 준비가 되었습니다.
17.2
4
장에서 살펴본 대로, 모델을 학습시키려면 ...