TensorFlow:如何在supervisor.loop(0.12.0rc1)内使用tf.train.SummaryWriter

TensorFlow:如何在supervisor.loop(0.12.0rc1)内使用tf.train.SummaryWriter,tensorflow,deep-learning,tensorboard,Tensorflow,Deep Learning,Tensorboard,我正在使用tf.train.Supervisor管理我的会话。我已经在使用主管中的总结作者来写一些总结。不过,在其他时间,我想再写一组总结。正如我所看到的,最简单的方法是使用supervisor.loop。我基本上是: 伪代码: summary_merged_valid = tf.summary.merge(summary_ops_valid) valid_writer = tf.train.SummaryWriter(logdir + '/valid') global_step = slim.

我正在使用
tf.train.Supervisor
管理我的会话。我已经在使用主管中的
总结作者
来写一些总结。不过,在其他时间,我想再写一组总结。正如我所看到的,最简单的方法是使用
supervisor.loop
。我基本上是:

伪代码:

summary_merged_valid = tf.summary.merge(summary_ops_valid)
valid_writer = tf.train.SummaryWriter(logdir + '/valid')
global_step = slim.get_or_create_global_step()

...

config = tf.ConfigProto(allow_soft_placement=True)
with sv.managed_session(config=config) as sess:

    ...

    sv.loop(validation_interval,
        valid_writer.add_summary,
        (summary_merged_valid, global_step)
        )

我该怎么做呢?

您也可以使用

sv.summary_computed(sess, summary, global_step)
手动。有一件有趣的事情似乎没有太多宣传,那就是您可以将摘要分组到集合中,如下所示:

tf.summary.scalar('learning_rate', p_lr, collections=['train'])
tf.summary.scalar('loss', t_loss, collections=['train', 'test'])
s_training = tf.summary.merge_all('train')
然后仅通过获取
s_training
并将其交给上述函数来写入
train
变量。

TensorFlow在启动附加服务下记录了这一点:

示例:启动一个线程以打印损失。我们希望该线程每60秒运行一次,因此使用sv.loop()启动它


请参阅@sunside提供的答案,了解如何以智能方式进行此操作的好技巧。

因此,为了清楚起见,对于
sv.summary\u computed
方法,您可以将其包装在
sc.loop
中?
sv = Supervisor(logdir='/tmp/mydir') with sv.managed_session(FLAGS.master) as sess:
    sv.loop(60, print_loss, (sess)) while not sv.should_stop(): 
        sess.run(my_train_op)