Tensorflowによる再現性の確保について以前の記事でもまとめたが、前回のはどうやら不十分らしく、GPUを使用して大量の計算(画像分析等)を実施する場合に、計算順の違い等により微小な誤差が積み重なって計算結果がずれてしまうことがあるようです。今回はその解決策も含めてまとめます。
<主に参考にしたサイト>
本記事は以下を参考にしています。Tensorflowにかかわる再現性確保手法について、最新の内容がまとめられています。
github.com
1. 結論
最終的に私は以下のコードに落ち着きました。
import os os.environ['PYTHONHASHSEED'] = '0' import tensorflow as tf os.environ['TF_DETERMINISTIC_OPS'] = 'true' os.environ['TF_CUDNN_DETERMINISTIC'] = 'true' import numpy as np import random as rn SEED = 123 def reset_random_seeds(): tf.random.set_seed(SEED) np.random.seed(SEED) rn.seed(SEED) reset_random_seeds() session_conf = tf.compat.v1.ConfigProto(intra_op_parallelism_threads=32, inter_op_parallelism_threads=32) tf.compat.v1.set_random_seed(SEED) sess = tf.compat.v1.Session(graph=tf.compat.v1.get_default_graph(), config=session_conf)
2. Tensorflowバージョン2.1.0以前の場合
どうやらTensorFlowのバージョンによって、必要な対応は異なるようです。私の場合はTensorflowの2.3.0なので、上記の通りとしましたが、2.1.0以前の場合は以下を追加する必要があるようです。
import tensorflow as tf from tfdeterminism import patch patch()
3. 終わりに
TensorFlowはバージョンによっても実施する内容によっても、再現性の確保の方法が色々と変わるようです。困ったときは上記のサイトに何かしら掲載されていると思いますので、良ければ参考にしてください。