Logging 如何防止摘要(或范围)“扩散”从tf.scalar\u summary迁移到tf.summary.scalar?

Logging 如何防止摘要(或范围)“扩散”从tf.scalar\u summary迁移到tf.summary.scalar?,logging,tensorflow,tensorboard,Logging,Tensorflow,Tensorboard,回到过去,我可以使用TensorFlow/TensorBoard代码(类似于下面的代码)创建一个包含变量“global_step_at_epoch”的范围,该变量显示了在模型运行的每个历元中达到的全局步长 但由于使用summary.scalar替换scalar_summary,如下所示,我为每个历元获得了一个新的范围。因此,在n个历元完成后,我得到了范围,和张力板面板,用于“在历元上的全局步骤”,“在历元上的全局步骤”,“在历元上的全局步骤”,“在历元上的全局步骤”,“在历元上的全局步骤”,“在

回到过去,我可以使用TensorFlow/TensorBoard代码(类似于下面的代码)创建一个包含变量“global_step_at_epoch”的范围,该变量显示了在模型运行的每个历元中达到的全局步长

但由于使用summary.scalar替换scalar_summary,如下所示,我为每个历元获得了一个新的范围。因此,在n个历元完成后,我得到了范围,和张力板面板,用于“在历元上的全局步骤”,“在历元上的全局步骤”,“在历元上的全局步骤”,“在历元上的全局步骤”,“在历元上的全局步骤”,“在历元上的全局步骤”全局步进,每一步都有一个点

如何从scalar_summary迁移到summary.scalar,以便下面的代码或它生成的类似代码能够像scalar_summary过去那样将所有单独的作用域合并到一个作用域中

global_step = tf.Variable(0, trainable=False, name='global_step')
test_writer = tf.summary.FileWriter(...)

with tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
                                      log_device_placement=FLAGS.log_device_placement)) as sess:
    sess.run(tf.initialize_all_variables())

    test_writer.add_summary(sess.run(tf.summary.scalar('global_step_at_epoch', 0)), 0)

    for ep in range(epochs):

        mini_batches = ...

        for mini_batch in mini_batches:

            gs = int(sess.run(global_step))

        test_writer.add_summary(sess.run(tf.summary.scalar('global_step_at_epoch', gs)), ep + 1)

我不确定它以前是如何工作的,但目前摘要的使用与其他节点的使用非常一致,在构建阶段创建一次摘要,然后在培训期间的会话中重复调用

将此应用于您的示例,可以得出:

global_step = tf.Variable(0, trainable=False, name='global_step')
test_writer = tf.summary.FileWriter(...)
# create summary op once here
gs_summary = tf.summary.scalar('global_step_at_epoch', global_step)

with tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
                                      log_device_placement=FLAGS.log_device_placement)) as sess:
    sess.run(tf.initialize_all_variables())
    test_writer.add_summary(sess.run(gs_summary), 0)
    for ep in range(epochs):
        mini_batches = ...
        for mini_batch in mini_batches:
            gs = int(sess.run(global_step))
        test_writer.add_summary(sess.run(gs_summary), ep + 1)

这可以通过tf.name_范围上下文管理器实现,方法是在首次使用该管理器时命名该管理器,并在您希望向现有范围添加新项目时再次起诉该管理器,而不扩散:

with tf.name_scope('foo') as a_scope:
   # some graph elements A

# Elsewhere ...

with tf.name_scope(a_scope):
  # additional graph elements B
这将把A和B元素放在一个范围“foo”中,而

将元素分别放在单独的作用域foo和foo_1中。

这似乎与。
with tf.name_scope('foo') as:
   # some graph elements A

with tf.name_scope('foo'):
  # additional graph elements B