2017-09-14 65 views
0

我已成功嘗試TensorFlow Mechanics 101教程,並且有以下問題。

我發現控制檯輸出的損耗值與TensorBoard顯示的損耗值之間存在差異。

我的理解是,這些應該是相同的:

  • 控制檯輸出是由fully_connected_feed.R 190行上的每個第100步驟中創建並輸出由sess$run施加到損失操作線182上創建;因此,這應該是該特定步驟的損失,四捨五入到小數點後兩位。
  • TensorBoard顯示的值也適用於每個第100步。它看起來是通過在線193上創建的來自summary_str的線194-195創建的,通過將sess$run應用於在線147上定義的摘要操作作爲tf$summary$merge_all()。這應該選擇唯一的彙總操作,相同的損失,在mnist.R的第125行中定義,並且此操作適用於同一步驟。

因此,這兩個損失值應該相同,直到四捨五入。

但是,他們不是,雖然他們很接近。我試圖比較他們對不同數據的學習沒有很好地收斂,並發現更大的差異。

在我看來,我不明白關於TensorFlow摘要的基本內容。

我正在使用RStudio版本1.0.153,R版本3.4.1,在Ubuntu 16.04上今天重新安裝所有R包。

任何幫助? 在此先感謝。

回答

0

問題是與此tuturial的文件fully_connected_feed.R的線183-184:

values <- sess$run(list(train_op, loss), feed_dict = feed_dict) 
loss_value <- values[[2]] 

我取代這兩行由以下代碼:

sess$run(train_op, feed_dict = feed_dict) 
loss_value = sess$run(loss, feed_dict = feed_dict) 

此代碼看起來是相當於原始代碼(這是我在此答案的早期版本中聲明的內容,參考the manual for tf$Session$run),但是it is not

使用此代碼,問題消失,並且控制檯輸出和相同loss操作的結果的摘要記錄變得相同。