Tensorflow摘要标量未显示

时间:2019-09-26 15:38:22

标签: tensorflow

我正在使用以下代码来生成用于我的准确性和成本的标量图,但是标量摘要未显示在张量板上。它给我一个错误,说No scalar data was found。有人可以看看吗?该模型的代码:

def train_neural_network(x):
    prediction = convolutional_neural_network(x)
    merged_summary_op = tf.summary.merge_all()

    with tf.name_scope("cost"):
        cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y))
        optimizer = tf.train.AdamOptimizer(learning_rate=1e-3).minimize(cost)
        tf.summary.scalar("cost", cost)

    hm_epochs = 10
    with tf.Session() as sess:

        writer = tf.summary.FileWriter('C:/Thesis/Conv3d/69', sess.graph)
        sess.run(tf.initialize_all_variables())

        successful_runs = 0
        total_runs = 0

        for epoch in range(hm_epochs):
            epoch_loss = 0
            for data in train_data:
                total_runs += 1
                try:
                    X = data[0]


                    Y = data[1]
                    _, c = sess.run([optimizer, cost], feed_dict={x: X, y: Y})
                    writer.add_summary(summary, global_step=epoch)
                    epoch_loss += c

                    successful_runs += 1

                except Exception as e:

                    pass

            print('Epoch', epoch + 1, 'completed out of', hm_epochs, 'loss:', epoch_loss)
            with tf.name_scope("accuracy"):
                correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1))
                accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
                tf.summary.scalar("accuracy", accuracy)



            print('Accuracy:', accuracy.eval({x: [i[0] for i in validation_data], y: [i[1] for i in validation_data]}))
        print('Done. Finishing accuracy:')
        print('Accuracy:', accuracy.eval({x: [i[0] for i in validation_data], y: [i[1] for i in validation_data]}))


        print('fitment percent:', successful_runs / total_runs)

1 个答案:

答案 0 :(得分:0)

您需要在定义摘要操作后调用merge_all 。现在发生的事情是,该操作根本没有任何要摘要的内容(因为它首先被称为),而且不幸的是“不够聪明”,无法添加稍后定义的摘要操作。

请注意,我还“修复”了代码,因为您通常不应循环运行TF ops;我将所有准确性内容移到了训练循环之前。

def train_neural_network(x):
    prediction = convolutional_neural_network(x)

    with tf.name_scope("cost"):
        cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y))
        optimizer = tf.train.AdamOptimizer(learning_rate=1e-3).minimize(cost)
        tf.summary.scalar("cost", cost)

    with tf.name_scope("accuracy"):
        correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1))
        accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
        tf.summary.scalar("accuracy", accuracy)

    merged_summary_op = tf.summary.merge_all()
    hm_epochs = 10
    with tf.Session() as sess:

        writer = tf.summary.FileWriter('C:/Thesis/Conv3d/69', sess.graph)
        sess.run(tf.initialize_all_variables())

        successful_runs = 0
        total_runs = 0

        for epoch in range(hm_epochs):
            epoch_loss = 0
            for data in train_data:
                total_runs += 1
                try:
                    X = data[0]


                    Y = data[1]
                    _, c = sess.run([optimizer, cost], feed_dict={x: X, y: Y})
                    writer.add_summary(summary, global_step=epoch)
                    epoch_loss += c

                    successful_runs += 1

                except Exception as e:

                    pass

            print('Epoch', epoch + 1, 'completed out of', hm_epochs, 'loss:', epoch_loss)

            print('Accuracy:', accuracy.eval({x: [i[0] for i in validation_data], y: [i[1] for i in validation_data]}))
        print('Done. Finishing accuracy:')
        print('Accuracy:', accuracy.eval({x: [i[0] for i in validation_data], y: [i[1] for i in validation_data]}))


        print('fitment percent:', successful_runs / total_runs)