Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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を初期化してから、層を追加する必要があります。

おわりに

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした