Почему моя тензорная доска показывает прекращенный вывод? - PullRequest
0 голосов
/ 05 января 2019

Я использую нейронную сеть с регистрацией точность обучения , Точность проверки и потери проверки . вот мой фрагмент кода.

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)

Теперь я получаю вывод тензорной платы, так как для каждой эпохи точность, точность проверки и потери проверки представлены в виде отдельных графиков с отдельными точками.

Для каждой эпохи я снова получаю эти три сюжета с другим пунктом.

Я хочу получить непрерывные точки для этих трех графиков, чтобы они образовывали линейный график.

1 Ответ

0 голосов
/ 05 января 2019

Каждый ваш вызов 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)
...