1. 161abcd

    Posted

    161abcd
Changes in title
+tensorflowで同じコードなのに結果が異なる。再現性のある機械学習がしたい。
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,63 @@
+##結果が異なる理由
+1.理由は乱数を使っているから。
+計算の度に乱数が異なるため結果が異なる。
+2.GPUを使っているから。
+GPU内部での演算順序が非決定的であるためGPU演算の結果は安定しない。
+##1解決策
+下記のコードでnumpyとtensorflowの乱数を固定する。
+
+
+```python
+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
+
+