在我的代碼的開始,(一Session
的範圍之外),我已經把我的隨機種子 -DropoutWrapper在運行中不確定嗎?
np.random.seed(1)
tf.set_random_seed(1)
這就是我輟學的定義看起來像 -
cell = tf.nn.rnn_cell.DropoutWrapper(cell, output_keep_prob=args.keep_prob, seed=1)
在我的第一個實驗,我保持keep_prob=1
。所有獲得的結果都是確定性的。我在多核CPU上運行它。
在我的第二個實驗中,我設置了keep_prob=0.8
,並且我運行了相同的代碼兩次。每個代碼有這些陳述,
sess.run(model.cost, feed)
sess.run(model.cost, feed)
結果第一次運行的代碼 -
(Pdb) sess.run(model.cost, feed)
4.9555049
(Pdb) sess.run(model.cost, feed)
4.9548969
預期的行爲,因爲DropoutWrapper
使用random_uniform
。
結果的第二代碼運行 -
(Pdb) sess.run(model.cost, feed)
4.9551616
(Pdb) sess.run(model.cost, feed)
4.9552417
爲什麼儘管限定的操作,並且圖種子該序列不相同的第二輸出?
如果您使用keep_prob = 1.0,您會得到相同的結果嗎?有各種各樣的東西可以引入非確定性,例如多線程操作,GPU操作(尤其是使用[CUDA atomics]的操作)(https://github.com/tensorflow/tensorflow/issues/2732#issuecomment-224661591)) ,SSE [說明](http://blog.nag.com/2011/02/wandering-precision.html) –
@YaroslavBulatov,我得到'keep_prob = 1'的相同結果。我只使用CPU TensorFlow – martianwars
如果您還設置操作級別種子,該怎麼辦? ([文檔](https://github.com/petewarden/tensorflow_makefile/blob/master/tensorflow/g3doc/api_docs/python/functions_and_classes/tf.set_random_seed.md)) –