画像認識向けにTensor演算をする機会が増えてくると、以下が便利
実行速度に関しては、いろいろと言われているモノのの、この便利さは後でサクっと読めるのが良い。そんなわけで、忘れないように、便利機能のおさらいと、有難い解説記事をまとめてみる。
##Einops
Einopsの便利さに関しては、上に貼ったオフィシャルサイトにある動画が、一番わかりやすいと思う。
【einops】テンソル演算と画像処理 -NumPy, JAX, PyTorch, TensorFlowに対応した可読性の良いコードを書く-【超入門・超実践】
こちらに、日本語の細かい解説記事あり。
お気に入りは軸をくっつけたり、順番変えたりできるrearrange。
Normalizeするために、軸をちょっと入れ替えたり、Batchと何かをくっつけてから、元に戻すとかが簡単。しかも、読みやすい!
アインシュタインの縮約記法なんて、かっこいい名前がついているけれど、ようはTensor計算を簡単にする関数。物理屋さんでないと分かりにくい表記なので、コンピューター屋さんは、for loopで書き直すと分かりやすい。
おススメの解説YouTubeビデオ
Einsum Is All You Need: NumPy, PyTorch and TensorFlow
そして、この頃はやりのAttentionやTransformerをeinsumとEinopsを使ってサクっと書く解説記事がこちら。
Understanding einsum for Deep learning: implement a transformer with multi-head self-attention from scratch
入力のTensorの数は任意。ルールは
- 入力の同じ文字はelementwiseに掛け合わせる
- 出力にない文字は全elementを足し合わせる(出力がない場合は全て足される)
- 出力の順番は指定できる(1,2なしで、転置などの軸の入れ替えが出来る)
行列計算
M = AB
をeinsumで書いてみると
これをfor loopで書き下してみる。
こんな感じで、考えるとeinsumも怖くない。
これで、この頃、よく使われているバッチ事の演算も簡単に書ける!