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

TensorFlow: Does each session run initiate a different batch of data in a graph?

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

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_session 作为 sess 在图形上下文中,我 运行 每隔一段时间就会执行以下操作:

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

考虑到批量张量实际上必须从 load_batch 开始,他们实际上会在每个会话 运行 中调用不同的批次,然后才能到达 logitspredictions,还是labels?因为现在当我 运行 每个会话时,我都会得到一个非常令人困惑的结果,因为即使预测也不匹配 tf.argmax(end_points['Predictions'], 1),尽管模型的准确性很高,但我没有得到任何预测远程甚至匹配标签以提供那种高精度。因此我怀疑 sess.run 的每个结果可能来自不同批次的数据。

这让我想到了我的下一个问题:当来自 load_batch 的批次一直到 train_op 时,是否有一种方法可以检查图表不同部分的结果,其中sess.run 实际上是 运行?换句话说,有没有办法在不调用另一个 sess.run 的情况下做我想做的事?

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

我意识到 运行ning 使用单独的 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 数组一样正常打印它们。