はじめに
ニューラルネットワークの学習をしていてコードを書いていると必ず出てくるnumpyのコード
numpy.sum(x, axis=i)
列方向に演算する場合は、axis=0
行方向に演算する場合は、axis=1
だと思い込み学習を進めていると全く意味が分からなくなり混乱してしまいました。
混乱していた理由
行、列みたいに理解をしようとしていたのが混乱の原因でした。
しかも行列方向の意味がどっち向きのことをいっているのか分からなくなり、さらにチャンネル次元が追加されるともう意味がわかりません。
axisの指定に迷っていてはそもそも学習に支障がでます。
もう二度と迷わないように自分なりの考え方を整理しました。
このように考えてみる
そもそものコードのあり方に立ち返り
axis=0,1,2,3・・・
はリストのインデックスと同じように演算したい次元の順番を指定していると考えて
ex:
(N,M)でNを演算したいときは、axis=0
(C,N,M)でCを演算したいときは、axis=0
(N,T,H)でHを演算したいときは、axis=2
これでひとまず
あとはその変数の次元がどうなっているのか。
そのモデルや関数はどうしたいのかを理解していれば大丈夫です。
はい、これからが本番です。