【问题标题】:Why my tensorboard is showing a discontinued output?为什么我的张量板显示已停止输出?
【发布时间】:2019-05-31 15:11:26
【问题描述】:

我正在运行一个记录训练准确度、验证准确度和验证损失的神经网络。这是我的代码 sn-p。

def show_progress(epoch, feed_dict_train, feed_dict_validate, val_loss):

    acc = session.run(accuracy, feed_dict=feed_dict_train)

    val_acc = session.run(accuracy, feed_dict=feed_dict_validate)

    msg = "Training Epoch {0} --- Training Accuracy: {1:>6.1%}, Validation Accuracy: {2:>6.1%},  Validation Loss: {3:.3f}"

    print(msg.format(epoch + 1, acc, val_acc, val_loss))
    return acc,val_acc



total_iterations = 0

#writer=tf.summary.FileWriter(options.tensorboard,session)

saver = tf.train.Saver()

def train(num_iteration):
    global total_iterations
    writer=tf.summary.FileWriter(options.tensorboard,session.graph)
    #global writer
    for i in range(total_iterations,
                   total_iterations + num_iteration):

        x_batch, y_true_batch, _, cls_batch = data.train.next_batch(batch_size)
        x_valid_batch, y_valid_batch, _, valid_cls_batch = data.valid.next_batch(batch_size)


        feed_dict_tr = {x: x_batch,
                           y_true: y_true_batch}
        feed_dict_val = {x: x_valid_batch,
                              y_true: y_valid_batch}

        session.run(optimizer, feed_dict=feed_dict_tr)

        if i % 10 == 0:

            val_loss = session.run(cost, feed_dict=feed_dict_val)
            epoch = int(i /10)    

            accu,valid_accu=show_progress(epoch, feed_dict_tr, feed_dict_val, val_loss)
            #getting values for visualising inside the tensorboard

            tf.summary.scalar("training_accuracy",accu)
            tf.summary.scalar("Validation_accuracy",valid_accu)
            tf.summary.scalar("Validation_loss",val_loss)
            #tf.summary.scalar("epoch",epoch)

            #merging all the values (serializing)

            merged=tf.summary.merge_all()
            summary=session.run(merged)

            #adding them to the events directory 
            writer.add_summary(summary,epoch)
            saver.save(session, options.save)


    total_iterations += num_iteration

train(num_iteration=10)

现在我得到一个张量板输出,对于每个时期,精度、验证精度和验证损失作为单独的单点图。

对于每个时代,我都会再次获得这三个图。

我想获得这三个图的连续点,以便形成折线图。

【问题讨论】:

    标签: python-3.x validation tensorflow tensorboard


    【解决方案1】:

    您对tf.summary.scalar() 的每次调用都会在计算图中创建一个节点。具体来说,在您的代码中,调用位于训练循环内,因此不同时期的指标会写入不同的图。

    tf.summary.scalar("training_accuracy", accu)
    tf.summary.scalar("Validation_accuracy", valid_accu)
    tf.summary.scalar("Validation_loss", val_loss)
    

    您可以做的是在循环之前使用占位符定义摘要操作。然后,在 eval 循环中,您可以为这些张量提供实数值。

    # Define a placeholder and wire it to the summary op.
    accu_tensor = tf.placeholder(tf.float32)
    tf.summary.scalar("training_accuracy", accu_tensor)
    summary_op = tf.summary.merge_all()
    
    # Create a session after defining ops.
    sess = tf.Session()
    writer = tf.summary.FileWriter(<some-directory>, sess.graph)
    
    for i in range(total_iterations,
                   total_iterations + num_iteration):
        # run training ops to get values for accu
        # ...
    
        # run the summary op with a feed_dict to feed the value.
        summaries = sess.run(summary_op, feed_dict={accu_tensor: accu})
        writer.add_summary(summaries, epoch)
    

    【讨论】:

    • 你能告诉我writer=tf.summary.FileWriter(options.tensorboard,session)应该去哪里吗?因为在进行必要的修改后我得到了一个新的错误。 TypeError: The passed graph must be an instance of Graph` 或已弃用的 GraphDef `
    • 它应该在您创建会话之后,例如session = tf.Session() -- 通常是在定义所有张量和操作之后。
    • 我稍微修改了我的答案以包含sess 和writer 的行。
    猜你喜欢
    • 1970-01-01
    • 2020-12-30
    • 2022-06-16
    • 2021-06-13
    • 1970-01-01
    • 2015-05-06
    • 2019-02-18
    • 1970-01-01
    • 2019-12-29
    相关资源
    最近更新 更多