116
76

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

kerasで学習が再現できない人へ

Last updated at Posted at 2017-11-23

「kerasの学習が再現できない!」という時の解決法を書きます!
実行環境は下記の通りです。

  • python3.6.1
  • Keras==2.0.9
  • tensorflow==1.4.0

導入(飛ばしていいけど読んでほしい!)

簡単なモデルを作る時にkerasを使いがちな自分ですが、今回研究でマルチレイヤーパーセプトロンを組んだ時に「学習の再現ができない!」という状態でしばらく格闘しました。
その時に発見した解決法を伝授いたします。

ちなみにブログ書くのは人生2回目の未熟者なのでお手柔らかに。。。
(1回目はこちらのkaggleの記事です!)
読み飛ばさないでほしいというのは、1回目のブログとかも読んで欲しかったからです。。。笑

ダメだった例

import numpy as np
import tensorflow as tf

np.random.seed(7)
tf.set_random_seed(7)

これでnumpyとtensorflowの乱数シードは固定していたのですが学習過程でずれが出てしまい、再現性が担保できませんでした。

結論(もう!?)

import os
import numpy as np
import random as rn
import tensorflow as tf

os.environ['PYTHONHASHSEED'] = '0'
np.random.seed(7)
rn.seed(7)

session_conf = tf.ConfigProto(
    intra_op_parallelism_threads=1,
    inter_op_parallelism_threads=1
)

from keras import backend as K

tf.set_random_seed(7)
sess = tf.Session(graph=tf.get_default_graph(), config=session_conf)
K.set_session(sess)

これ書いておけば再現性担保できました!
調べていた中でもnp.random.seedだけの記述も多かったんですが、それだけだと微妙に学習過程でずれが出ちゃいましたね。
PYTHONHASHSEEDでpythonの乱数固定して、random関数のシードも固定して、sessionも定義してようやくありつけました。
いらない部分もあるかもなので、コメントいただけるとありがたいです。

まとめ

今回はすごく短いですが、困っている人の助けになればなと思います。
近々othlo techという名古屋の学生クリエイティブ団体のAdvent Calendarでブログを書くことになると思うので、その時によろしくです!
また見てください〜

116
76
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
116
76

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?