最近在準備小**的實驗,因為是做對比實驗,但是由於存在隨機性,在tensorflow框架中每次執行的結果都不一樣,導致我改進的方法不知道是由於隨機性造成的還是真的起到了作用,越來越懷疑,於是到處搜,怎麼消除網路的隨機性,終於在今天解決了這個問題,接下來可以放心調參了。
首先所有的初始化要設定隨機種子,在網路訓練最前面加上以下**,消除引數初始化帶來的隨機性,如果你的程式中用到了dropout也是需要設定seed的。
以上是圖級seed,我驗證了每次sess.run還是會導致結果不一致,只是當前會話中執行是一致的,因此如果你的程式中用到了隨機初始化權重,是需要設定乙個操作級seed的,如下所示
tf.get_variable('weight', shape, tf.float32, initializer=tf.truncated_normal_initializer(mean=0,stddev=0.02,seed=1)
seed=1就是操作級的隨機種子設定。
然而單單設定上面的,每次執行的結果還是不一樣,於是又苦逼的搜了很久,有的地方看到是因為gpu也會帶來隨機性,於是帶著這個關鍵字又去搜,終於我找到了乙個非常有用的方法,在呼叫第三方庫的地方加上以下**,首先需要pip install tensorflow-determinism(支援 tensorflow1.14以上的版本), 附上相關鏈結
這樣做就可以解決每次執行不一樣的結果啦
就可以當乙個快樂的調參俠
tensorflow中指定GPU及GPU視訊記憶體設定
檢視機器上gpu情況 命令 nvidia smi 功能 顯示機器上gpu的情況 命令 nvidia smi l 功能 定時更新顯示機器上gpu的情況 其中左上側有0 1 2 3的編號,表示gpu的編號,在後面指定gpu時需要使用這個編號。在終端執行程式時指定gpu cuda visible devi...
tensorflow設定gpu及gpu視訊記憶體使用
os.environ cuda visible devices 0 使用 gpu 0 os.environ cuda visible devices 0,1 使用 gpu 0,1 一是讓tensorflow在執行過程中動態申請視訊記憶體,需要多少就申請多少 第二種方式就是限制gpu的使用率。conf...
tensorflow使用GPU小記
import os os.envrion cuda visible devices 0,1 在cmd中輸入 nvidia smi 要想不斷重新整理記錄 nvidia smi l 報錯 failed to create cublas handle cublas status alloc failed原...