kerasで学習して得られた重みを自作のニューラルネットワークに適用する機会があったので調べました。
model.get_weights()について
Keras Documentationにはこうあります。
model.get_weights(): モデルの全ての重みテンソル(Numpy配列)のリスト返します.
ということで、この関数は複数のNumpy配列で構成されたlistを返し、それが学習結果の重みを表しています。しかし、肝心のlistのこの部分がニューラルネットワークのどこの重みを指しているのか、ということについてはここには記述されていませんでした。
調査結果
自作のニューラルネットワークに得られた重みを設定するなど試行錯誤を行ったり、色々検索を行った結果、このような構造になっているということがわかりました。記号の意味、ニューラルネットワークの構造は参考元の図に準じます。
## list[0]
[[w11(1) w12(1)]
[w21(1) w22(1)]]
## list[1]
[w10(1) w20(1)]
## list[2]
[[w11(2)]
[w12(2)]]
## list[3]
[w10(2)]
まとめ
三層の全結合ニューラルネットワークの場合、list[0]から順に入力層→中間層への重み、中間層へのバイアス入力、中間層→出力層への重み、出力層へのバイアス入力、となるようです。
参考
http://ni4muraano.hatenablog.com/entry/2017/02/01/000000
https://keras.io/ja/models/about-keras-models/
https://groups.google.com/forum/#!topic/keras-users/kLm-bTvDTaw