Невозможно сохранить точность, используя tf.summary() для набора тестов

Я опустил ненужные фрагменты кода, чтобы сохранить детали вопроса в чистоте. Я пытаюсь построить кривые тренировочной и тестовой моделей. Я могу хранить кривые потери тренировки и точности. Но при записи с использованием test_writer я получаю следующую ошибку:

test_writer.add_summary(test_summary,step*batch_size)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/summary/writer/writer.py", line 123, in add_summary
    for value in summary.value:
AttributeError: 'list' object has no attribute 'value'

Код:

accuracy = tf.reduce_mean(correct_prediction)

#Summary
tf.summary.scalar("loss",cross_entropy)
accuracy_summary = tf.summary.scalar("accuracy",accuracy)

merged_summary_op = tf.summary.merge_all()
train_writer = tf.summary.FileWriter(graph_location)
train_writer.add_graph(tf.get_default_graph())
test_writer = tf.summary.FileWriter(location)
test_writer.add_graph(tf.get_default_graph())

with  tf.Session() as sess:
    print "STARTED TENSORLFOW SESSION"
    sess.run(tf.initialize_all_variables())
    while step*batch_size < training_iters:
        if count <= 900:
            _,summary = sess.run([train_step,merged_summary_op], feed_dict={x:batch_xs, j:batch_js, y_:batch_ys, keep_prob:dropout})
            train_writer.add_summary(summary, step*batch_size)
        else:
            test_summary = sess.run([accuracy_summary], feed_dict={x:test_xs,j:test_js,y_:test_ys, keep_prob: 0.5})
            test_writer.add_summary(test_summary,step*batch_size)

Мои тренировочные кривые построены нормально. Мои тестовые кривые работают, если я изменяю это на test_summary = sess.run([train_step,merged_summary_op], feed_dict={x:test_xs,j:test_js,y_:test_ys, keep_prob: 0.5}) но это не имеет смысла, так как я не хотел бы тренировать свой оптимизатор, подавая тестовый набор.

Что мне здесь не хватает?

1 ответ

Решение

Я думаю, что вы должны просто переписать предпоследнюю строку из

test_summary = sess.run([accuracy_summary], feed_dict={x:test_xs,j:test_js,y_:test_ys, keep_prob: 0.5})

в

test_summary = sess.run(accuracy_summary, feed_dict={x:test_xs,j:test_js,y_:test_ys, keep_prob: 0.5})

для того, чтобы иметь скалярный вывод, а не список.

Другие вопросы по тегам