LoginSignup
3
8

More than 5 years have passed since last update.

Kerasの重みの初期化タイミング

Last updated at Posted at 2018-11-05

Kerasの重みの初期化タイミング

はじめに

ニューラルネットワークを使う際に、重みのよる初期化の違いを飽和するために複数回に渡って学習させなおし、平均した結果が欲しいことがあります。
しかし、自分が初心者のため、どこで重みの初期化が行われているかわからなかったので検証してみました。

結論

先に結論を書きます。
重みはレイヤーの追加時に初期化されてるようです。
公式のドキュメントにも書いてありました。
https://keras.io/ja/initializations/

このページは読んでいたのですが、初期化方法を定義するだけだと勘違いしていました。

二回立て続けに学習させた場合

#引数は見易さのため省略しています
model.fit()
model.fit()

このようにfitを二回行った場合は、重みは初期化されず、続けて学習されているようです。
2回目の学習のlossの値がほぼ変わらずに始まります。(1回目のEpochでは1.0以上のlossです)
スクリーンショット 2018-11-05 12.19.41.png

途中にcompileを挟む

#引数は見易さのため省略しています
model.fit()
model.compile()
model.fit()

きっとダメだろうな、と思いつつも実行。
スクリーンショット 2018-11-05 15.04.40.png
やっぱりダメでした。

レイヤーをもう一度追加

追記

この方法だと層が追加されているだけで上手くいかないことを教えていただきました
(追記終わり)

ここで、ようやく私は、公式ドキュメントに書いてあることが初期化法を定義しているだけではない、という考えに気がつきました。

#引数は見易さのため省略しています
for i in range(2):
        model.add()
        model.add()
        model.add()
        model.summary()
        model.compile()
        model.fit()

3.jpg

lossがちゃんと高くなっている……!
層が追加されているためにlossが高くなっていることをコメントで指摘していただきました。

層の初期化とレイヤの追加

for i in range(2):
        model = Sequential()
        model.add()
        model.add()
        model.add()
        model.summary()
        model.compile()
        model.fit()

modelを初期化してから、層を追加する必要があります。

おわりに

私の読解力に難ありでした。
もし間違っていたら、コメントいただけると嬉しいです。

3
8
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
8