Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
72
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

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

「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でブログを書くことになると思うので、その時によろしくです!
また見てください〜

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
72
Help us understand the problem. What are the problem?