在张量流中计算多个批次的精确移动平均值
Computing exact moving average over multiple batches in 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 = []
我知道我可以使用衰减为 1.0 的 ExponentialMovingAverage
,但我仍然需要一些方法来每 N 批重置一次。真的,如果我只关心在张量板上可视化损失,那么重置可能是不必要的,但我仍然很好奇出于其他原因(例如,计算测试数据集的总准确度太在一个批次中大到 运行)。
可以使用占位符和 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 = []
我还没有尝试过,这是从可视化数据中匆忙复制过来的,但我希望这样的方法可行。
您可以手动构造摘要对象,如下所示:
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)
在训练期间,我想将最后 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 = []
我知道我可以使用衰减为 1.0 的 ExponentialMovingAverage
,但我仍然需要一些方法来每 N 批重置一次。真的,如果我只关心在张量板上可视化损失,那么重置可能是不必要的,但我仍然很好奇出于其他原因(例如,计算测试数据集的总准确度太在一个批次中大到 运行)。
可以使用占位符和 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 = []
我还没有尝试过,这是从可视化数据中匆忙复制过来的,但我希望这样的方法可行。
您可以手动构造摘要对象,如下所示:
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)