日々精進

新しく学んだことを書き留めていきます

tensorflowでEstimatorを使って学習する時はtf.set_random_seedを自分で呼んではいけない

注意:tensorflow 1.15.2で確認したので最新版では以下の話は違うかも知れません

すべてのradom seedを固定する関数を作ってそれを呼ぶようにしていたが、学習の再現性がなく困っていた。

Estimatorのコードを読んでみると、なんとEstimatorの中に以下のコードがあり、random seedをセットしていた。しかも、self._config.tf_random_seedの初期値はNoneなので、自分でtf.set_random_seedを実行していてもseedがNoneで上書きされて固定されなくなるという罠・・・

random_seed.set_random_seed(self._config.tf_random_seed)

Estimatorを使う場合は、RunConfig(tf_random_seed=seed)にseedを設定してEstimatorのコンストラクタに渡せばseedを固定できる。

参考: stackoverflow.com