5
我意識到,我的模型最終每次訓練時都會有所不同,即使我將TensorFlow隨機種子保持不變。非確定性漸變計算
我證實:
- 初始化是確定性的;在第一次更新之前權重是相同的。
- 輸入是確定性的。事實上,包括損失在內的各種正向計算在第一批中是相同的。
- 第一批次的梯度是不同的。具體來說,我在比較
tf.gradients(loss, train_variables)
的輸出。雖然loss
和train_variables
具有相同的值,但對於某些變量,梯度爲,有時不同。差異非常顯着(有時單變量梯度的絕對差之和大於1)。
我得出結論,這是導致非確定性的梯度計算。 我看過this question,在intra_op_parallelism_thread=1
和inter_op_parallelism_thread=1
的CPU上運行時問題仍然存在。
當正向傳球不是正向時,反向傳球如何不確定?我怎麼能進一步調試呢?
如果是這樣的話,演計算將是不同的過吧?另外,不應該(靜態)種子決定哪些連接被丟棄? – Georg
您的意思是在訓練或評估時進行前向計算嗎?通常的做法是在驗證時禁用丟失。它是如何在您的代碼中實現的?是的,隨機種子應該確定哪些連接被丟棄。也許你遇到了與[this](http://stackoverflow.com/a/36289575/3941813)中提到的問題類似的問題。 – jabalazs
我的意思是訓練時的前向計算。我使用'tf.nn.dropout()',但我只是檢查,即使'keep_prob == 1'問題依然存在。我還檢查了只有一個圖被實例化('tf.Graph()'實際上從未在代碼中調用過)。 – Georg