【问题标题】:how to log validation loss and accuracy using tfslim如何使用 tfslim 记录验证损失和准确性
【发布时间】:2018-09-29 01:17:30
【问题描述】:

在使用 tf-slim 时,有什么方法可以将验证损失和准确性记录到 tensorboard?当我使用 keras 时,下面的代码可以为我做到这一点:

model.fit_generator(generator=train_gen(), validation_data=valid_gen(),...)

然后模型会在每个epoch之后评估validation loss和accuracy,非常方便。但是如何使用 tf-slim 来实现呢?以下步骤使用原始张量流,这不是我想要的:

with tf.Session() as sess:
    for step in range(100000):
        sess.run(train_op, feed_dict={X: X_train, y: y_train})
        if n % batch_size * batches_per_epoch == 0:
            print(sess.run(train_op, feed_dict={X: X_train, y: y_train}))

目前,使用 tf-slim 训练模型的步骤是:

tf.contrib.slim.learning.train(
    train_op=train_op,
    logdir="logs",
    number_of_steps=10000,
    log_every_n_steps = 10,
    save_summaries_secs=1
)

那么如何使用上述苗条的训练过程评估每个 epoch 后的验证损失和准确性?

提前致谢!

【问题讨论】:

    标签: tensorflow tensorboard tf-slim


    【解决方案1】:

    TF Slim repo (issue #5987) 仍在讨论此事。 该框架允许您轻松创建评估脚本以在训练之后/并行运行(下面的解决方案 1),但有些人正在推动能够实现“批量训练 + 验证的经典循环”(解决方案 2)。


    1。在另一个脚本中使用slim.evaluation

    TF Slim 具有评估方法,例如slim.evaluation.evaluation_loop() 您可以在另一个脚本中使用(可以与训练并行运行)来定期加载模型的最新检查点并执行评估。 TF Slim 页面包含一个很好的示例这样的脚本的外观:example

    2。提供自定义 train_step_fnslim.learning.train()

    讨论的发起者提出的一个不完整的解决方案利用了您可以提供给slim.learning.train()的自定义训练步骤功能:

    """
    Snippet from code by Kevin Malakoff @kmalakoff
    https://github.com/tensorflow/tensorflow/issues/5987#issue-192626454
    """
    # ...
    accuracy_validation = slim.metrics.accuracy(
        tf.argmax(predictions_validation, 1), 
        tf.argmax(labels_validation, 1)) # ... or whatever metrics needed
    
    def train_step_fn(session, *args, **kwargs):
      total_loss, should_stop = train_step(session, *args, **kwargs)
    
      if train_step_fn.step % FLAGS.validation_check == 0:
        accuracy = session.run(train_step_fn.accuracy_validation)
        print('Step %s - Loss: %.2f Accuracy: %.2f%%' % (str(train_step_fn.step).rjust(6, '0'), total_loss, accuracy * 100))
    
      # ...
    
      train_step_fn.step += 1
      return [total_loss, should_stop]
    
    train_step_fn.step = 0
    train_step_fn.accuracy_validation = accuracy_validation
    
    slim.learning.train(
      train_op,
      FLAGS.logs_dir,
      train_step_fn=train_step_fn,
      graph=graph,
      number_of_steps=FLAGS.max_steps
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-08
      • 2018-04-03
      • 2020-08-25
      • 2017-01-10
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多