LoginSignup
8
3

More than 3 years have passed since last update.

tensorflowで同じコードなのに結果が異なる。再現性のある機械学習がしたい。

Posted at

結果が異なる理由

1.理由は乱数を使っているから。
計算の度に乱数が異なるため結果が異なる。
2.GPUを使っているから。
GPU内部での演算順序が非決定的であるためGPU演算の結果は安定しない。

1解決策

下記のコードでnumpyとtensorflowの乱数を固定する。

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

# The below is necessary in Python 3.2.3 onwards to
# have reproducible behavior for certain hash-based operations.
# See these references for further details:
# https://docs.python.org/3.4/using/cmdline.html#envvar-PYTHONHASHSEED
# https://github.com/keras-team/keras/issues/2280#issuecomment-306959926

import os
os.environ['PYTHONHASHSEED'] = '0'

# The below is necessary for starting Numpy generated random numbers
# in a well-defined initial state.

np.random.seed(42)

# The below is necessary for starting core Python generated random numbers
# in a well-defined state.

rn.seed(12345)

# Force TensorFlow to use single thread.
# Multiple threads are a potential source of
# non-reproducible results.
# For further details, see: https://stackoverflow.com/questions/42022950/which-seeds-have-to-be-set-where-to-realize-100-reproducibility-of-training-res

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

from keras import backend as K

# The below tf.set_random_seed() will make random number generation
# in the TensorFlow backend have a well-defined initial state.
# For further details, see: https://www.tensorflow.org/api_docs/python/tf/set_random_seed

tf.set_random_seed(1234)

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

# Rest of code follows ...

参考
https://keras.io/ja/getting-started/faq/#how-can-i-obtain-reproducible-results-using-keras-during-development

2解決策

なし

参考
https://qiita.com/TokyoMickey/items/63c4053740ab1f3f28a2

8
3
2

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
8
3