计算张量流中多个批次的精确移动平均值

时间:2016-03-01 05:00:08

标签: tensorflow

在培训期间,我想将最后N个小批量的平均损失写为SummaryWriter,以平滑非常嘈杂的批次丢失。很容易在python中计算并打印它,但我想将它添加到摘要中,以便我可以在tensorboard中看到它。这是我现在正在做的一个过于简化的例子。

losses = []
for i in range(10000):
  _, loss = session.run([train_op, loss_op])
  losses.append(loss)
  if i % 100 == 0:
    # How to produce a scalar_summary here?
    print sum(losses)/len(losses)
    losses = []

我知道我可以使用ExponentialMovingAverage衰减为1.0,但我仍然需要某种方法来重置每N批次。真的,如果我所关心的只是可视化张量板中的损失,重置可能不是必要的,但我仍然很好奇如何出于其他原因(例如计算测试数据集的总体准确度)进行聚合大批量运行。)

2 个答案:

答案 0 :(得分:7)

您可以手动构建Summary对象,如下所示:

from tensorflow.core.framework import summary_pb2

def make_summary(name, val):
    return summary_pb2.Summary(value=[summary_pb2.Summary.Value(tag=name, 
                                                                simple_value=val)])

summary_writer.add_summary(make_summary('myvalue', myvalue), step)

答案 1 :(得分:2)

可以使用占位符和feed_dict将数据从python传递到图形函数tf.scalar_summary

average_pl = tf.placeholder(tf.float32)
average_summary = tf.summary.scalar("average_loss", average_pl)
writer = tf.summary.FileWriter("/tmp/mnist_logs", sess.graph_def)

losses = []
for i in range(10000):
  _, loss = session.run([train_op, loss_op])
  losses.append(loss)
  if i % 100 == 0:
    # How to produce a scalar_summary here?
    feed = {average_pl: sum(losses)/len(losses)}
    summary_str = sess.run(average_summary, feed_dict=feed)
    writer.add_summary(summary_str, i)
    losses = []

我还没有尝试过,这是从可视化数据中匆匆复制的,但是我希望这样的东西可以工作。