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
开始,他们实际上会在每个会话 运行 中调用不同的批次,然后才能到达 logits
、predictions
,还是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 数组一样正常打印它们。
意思是说如果我有如下图表:
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
开始,他们实际上会在每个会话 运行 中调用不同的批次,然后才能到达 logits
、predictions
,还是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 数组一样正常打印它们。