Tensorflow:如何在不触发出队的情况下运行摘要操作

时间:2016-11-21 15:09:34

标签: tensorflow

我正在尝试用Tensorflow编写一个脚本来训练网络。我有一些要求:

  1. 我需要使用"加载训练数据集以及验证数据集;训练数据集的FIFOqueue设置为num_epoches,但验证数据集的10仅设置为num_epoches,因为在测试中,我们只需要运行整个验证数据集一次。
  2. 我需要在使用验证数据集的几个训练步骤后测试网络,而不是使用训练脚本保存的检查点文件在单独的脚本中测试;
  3. 我需要将1loss数据存储到摘要文件中,以便在Tensorboard中进行可视化。
  4. 然而,

    1. 我发现每次运行代码accuracy_validation时,它实际上都会触发输入数据的出列操作,这不是我的预期。
    2. 并且,经过几个步骤后,我需要使用整个验证数据集测试网络,而sess.run(summary_op)只会使用一批验证数据集来测试网络。
    3. 那么如何解决这两个问题?

3 个答案:

答案 0 :(得分:0)

MonitoredSessionSessionRunHooks可让您在运行常规培训的同时运行摘要,因此不会删除示例。

答案 1 :(得分:0)

您可以从sess运行中获取数据点并将其直接添加到摘要中,而无需运行summary_op,例如:

step, _, loss_value, cur_learning_rate = sess.run([global_step, train_op, avg_loss, lr])
...
summary = tf.Summary()
summary.value.add(tag='train/loss_values', simple_value=loss_value)
summary.value.add(tag='train/learning_rates', simple_value=cur_learning_rate)
summary_writer.add_summary(summary, step)

这样,您的summary_op将不会使用该队列。

答案 2 :(得分:0)

另一种解决方案是在训练操作的同时运行摘要操作。

_, loss_value, summary = sess.run([train_op, avg_loss, summary_op])

这样你只出列一次。