【问题标题】:TensorFlow - Removing name scope when plotting summary?TensorFlow - 绘制摘要时删除名称范围?
【发布时间】:2017-10-04 11:56:24
【问题描述】:

我目前正在构建我的操作两次,一次用于训练,一次用于验证,将 variable_scope 设置为 reuse=True 以确保我只有一组权重要训练。

为了组织操作,我将操作构建调用包含在一个

with tf.name_scope='train':

同样地做同样的验证。这使我可以轻松地创建一些摘要挂钩,只需调用

tf.summary.merge(tf.get_collection(tf.GraphKeys.SUMMARIES, scope='train'))

最后获取训练图或验证图的摘要,并使用适当的摘要保存程序保存这些摘要。

不幸的是,这也意味着训练摘要中的标量不会与验证中的等效标量显示在同一图上(因为它们位于不同的名称范围内)。

是否有一种方法可以在保存摘要之前删除名称范围,或者是否有另一种方法可以将特定案例的摘​​要包装在一起而不应用名称范围?还是我需要手动跟踪每个案例的摘要?

编辑:

澄清一下,我的代码如下所示:

with tf.name_scope('train'):
    create_network()  # Summaries create in here.
with tf.name_scope('validation'):
    create_network(reuse=True)  # More summaries in here.
train_summaries = tf.summary.merge(tf.get_collection(tf.GraphKeys.SUMMARIES, scope='train'))
validation_summaries = tf.summary.merge(tf.get_collection(tf.GraphKeys.SUMMARIES, scope='validation'))
# Down here, create the summary saver hooks, etc.

【问题讨论】:

    标签: tensorflow tensorboard


    【解决方案1】:

    multi-GPU CIFRA-10 example code 中做了这样的事情来去掉不必要的前缀:

    loss_name = re.sub('%s_[0-9]*/' % cifar10.TOWER_NAME, '', l.op.name)
    tf.summary.scalar(loss_name, l)
    

    也许您可以从代码的validationtraining 部分报告具有相同名称的标量。

    【讨论】:

    • 感谢您的回复!但除非我遗漏了什么,否则我认为您的解决方案不适用于我的情况。我澄清了上面的代码可能看起来像什么,因为我不确定我是否最清楚。也就是说,摘要已经在名称范围内创建。此外,此时需要名称范围,因为我需要它来轻松获取单独案例的摘要。没有它,我就无法简单地获取整套摘要(无需手动将代码中的每个摘要标记为集合)。
    • @golmschenk 您可以保留全局查找以及单独报告这个额外的标量。
    • 我明白了,如果我明白你在说什么,我可以使用名称范围之外的全局查找来获取我想要添加到摘要中的值。但是,这仍然需要我单独指定要执行此操作的每个此类值,对吗?
    • @golmschenk 恐怕你想在电路板的同一部分绘制的所有标量都需要类似的东西。但是,我对 Tensorboard 的经验非常有限,因此可能仍然存在其他更简单的方法。
    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2017-05-17
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多