TensorFlow:每个会话运行是否会在图中启动不同批次的数据?

kwo*_*sin 5 python machine-learning computer-vision deep-learning tensorflow

意思是说如果我有下面的图表:

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(...)
Run Code Online (Sandbox Code Playgroud)

managed_session在图形上下文中的主管中sess,我每隔一段时间运行以下命令:

print sess.run(logits)
print sess.run(end_points['Predictions'])
print sess.run(predictions)
print sess.run(labels)
Run Code Online (Sandbox Code Playgroud)

考虑到批处理张量实际上必须在load_batch到达logitspredictions或之前从头开始,它们实际上是否会为每次 sess 运行调用不同的批处理labels?因为现在当我运行每个会话时,我得到一个非常令人困惑的结果,即使预测也不匹配tf.argmax(end_points['Predictions'], 1),尽管模型的准确性很高,但我没有得到任何与标签远程匹配的预测来给出这种类型的高精度。因此我怀疑每个结果sess.run可能来自不同批次的数据。

这引出了我的下一个问题:当 load_batch 中的批次一直到 train_op(实际上是在 train_op 中sess.run运行)时,有没有办法检查图表不同部分的结果?换句话说,有没有一种方法可以做我想做的事而不需要另一个sess.run

另外,如果我以这种方式使用 sess.run 检查结果,是否会影响我的训练,因为某些批次的数据将被跳过而不会到达 train_op?

kwo*_*sin 5

我意识到使用单独运行存在一个问题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
Run Code Online (Sandbox Code Playgroud)

所有的数量都与我的预期非常吻合。我也尝试过tf.Print通过编写类似的内容来使用:

logits = tf.Print(logits, [logits], message = 'logits: \n', summarize = 100)
Run Code Online (Sandbox Code Playgroud)

定义后立即logits,以便它们可以在我运行的同一会话中打印train_op。然而,打印相当混乱,所以我更喜欢第一种方法,在会话中运行所有内容以首先获取值,然后像 numpy 数组一样正常打印它们。