2016-05-08 8 views
0

如何查看與dropout訓練TensorFlow神經網絡實際使用的輟學的精度和成本?如何記錄或查看用於訓練具有丟失的TensorFlow神經網絡的成本?

正如預期的那樣,每個I運行summary時間,例如與

train_writer.add_summary(sess.run(merged, feed_dict=foo), step) 

print(sess.run(accuracy, feed_dict=foo)) 

如果網絡包括退學生,而foo飼料「保持概率」 1.0之外,我會得到不同的值,這樣,例如,我得到一個不同的每次損失或準確性 - 例如,三點連

print(sess.run(accuracy, feed_dict=foo)) 
print(sess.run(accuracy, feed_dict=foo)) 
print(sess.run(accuracy, feed_dict=foo)) 

準確性緊跟連續計算可能會給像

75.808 
75.646 
75.770 

儘管它們大致相同,但它們並不完全一樣,大概是因爲每次評估時,網絡都會丟棄不同的節點。這樣做的後果必然是我從未看到在培訓中實際遇到的成本。

如何登錄或查看與輟學訓練TensorFlow神經網絡的實際使用(使用網絡計算機或其他彙總值)的成本是多少?

回答

2

而且問題出在哪裏?如果你打電話三次隨機網絡,你應該應該得到三個不同的值。當你記錄來自網絡的損失時,你將記錄在訓練期間實際使用的損失。基本上,你可以只宣讀了您的計算圖表值,如:

for i in range(100): 
    batch_xs, batch_ys = mnist.train.next_batch(100) 
    cross_entropy = -tf.reduce_sum(y_ * tf.log(y)) 
    _, loss_val = sess.run([train_step, cross_entropy], 
          feed_dict={x: batch_xs, y_: batch_ys}) 
    print 'loss = ' + loss_val 

,它將打印這是在訓練階段計算(不會計算兩次的損失,因此輟學輸出屏蔽不會重採樣)。

相反,如果你想看到「這將是對列車精度設置,如果我現在停止學習」你需要一個EVAL圖https://www.tensorflow.org/versions/r0.8/tutorials/mnist/tf/index.html#evaluate-the-model,它會告訴您的網絡,它是時間從隨機改變輟學單位,縮放/平均結果。

+0

「問題」是不是我得到三個(或然而,許多)不同的值(這是預期的),它是關於如何進入訓練過程中遇到的一個。 – orome

+0

爲了確保我有關於如何完成訪問的關鍵點:是否提供給「run」的任何調用的任何情況都將僅評估一次*無論評估過程遇到多少次,所以如果我通過'[op1,op2,op3]',並且,例如'op1'本身評估op2',然後評估'op3',我將看到後兩者的值將與用於計算'op1'的那些? – orome

+0

如果這是正確的,問題的另一個關鍵部分是:我如何將這個值(在你的例子中是'loss_val')寫入日誌(例如,用'SummaryWriter')? – orome