1

Значение сказать, если у меня есть следующий график, как: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(...) 

и в супервизора managed_session как sess в контексте графика, я запускаю следующее каждый раз в то время:

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

Do они на самом деле звонят в разные партии для каждого сеанса sess, учитывая, что тензор партии должен начинаться с 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?

ответ

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.