1

意思就是說,如果我有如下圖所示:TensorFlow:每個會話是否在圖表中啓動不同批次的數據?

print sess.run(logits) 
print sess.run(end_points['Predictions']) 
print sess.run(predictions) 
print sess.run(labels) 

務必:

images, labels = load_batch(...) 

with slim.arg_scope(inception_resnet_v2_arg_scope()): 
    logits, end_points = inception_resnet_v2(images, num_classes = dataset.num_classes, is_training = True) 

predictions = tf.argmax(end_points['Predictions'], 1) 
accuracy, accuracy_update = tf.contrib.metrics.streaming_accuracy(predictions, labels) 

.... 

train_op = slim.learning.create_train_op(...) 

,並在圖形範圍內主管managed_sessionsess,我運行在一段時間之後每隔一段時間他們實際上會爲每次運行調用不同的批次,因爲批量張量必須從load_batch開始,然後才能達到logitspredictionslabels?因爲現在當我運行這些會話時,我得到一個非常混亂的結果,即使預測結果不匹配tf.argmax(end_points['Predictions'], 1),儘管模型的準確性很高,但我沒有得到任何遠程甚至與標籤匹配的預測種類很精確。因此我懷疑sess.run的每個結果可能來自不同批次的數據。

這引出我的下一個問題:有沒有辦法檢查圖形不同部分的結果,當一批從load_batch一直到train_op時,實際運行sess.run?換句話說,有沒有辦法做我想做的事情,而不需要另外撥打sess.run

另外,如果我以這種方式使用sess.run檢查結果,是否會影響我的訓練,因爲有些批次的數據會被跳過而不能到達train_op?

回答

1

我意識到使用單獨的sess.run運行時出現問題,因爲加載的數據總是不同的。相反,當我做了這樣的事情:

logits, probabilities, predictions, labels = sess.run([logits, probabilities, predictions, labels]) 
print 'logits: \n', logits 
print 'Probabilities: \n', probabilities 
print 'predictions: \n', predictions 
print 'Labels:\n:', labels 

所有的數量與我的預期一致。我寫東西喜歡用tf.Print也嘗試:

logits = tf.Print(logits, [logits], message = 'logits: \n', summarize = 100) 

定義logits後,使他們能我運行train_op在同一會話中獲得打印。然而,打印相當混亂,所以我寧願在會話中運行所有內容的第一種方法來首先獲取值,然後像numpy數組一樣打印它們。

相關問題