-
アインシュタインの縮約記法
-
テンソル積を書くと大量の
が出てきてうざい -
なので,
を省略しよう, というのが事の始まり -
ならij,jk → ik
-
プログラム的に考えれば, 単純にfor を外しただけ
- 例えば
- ドット積
z[i,j](https://scrapbox.io/yuwd/i%2Cj) += x[i,j](https://scrapbox.io/yuwd/i%2Cj) * y[i,j](https://scrapbox.io/yuwd/i%2Cj)
np.einsum("ij,ij->ij", x, y)
- 内積
z[j,k](https://scrapbox.io/yuwd/j%2Ck) += x[j,i](https://scrapbox.io/yuwd/j%2Ci) * y[i,k](https://scrapbox.io/yuwd/i%2Ck)
np.einsum("ji,ik->jk", x, y)
-
軸の入れ替えなどでも使える
y = torch.einsum('nchw->nhwc', y).detach().cpu()
-
-
実際は遅いからやめたほうが良さそう
-
でもMAEの実装で使われてるからなぁ…
JavaScriptを有効にしてください
einsum
· ☕ 1 min read
