【问题标题】:Does histogram_summary respect name_scopehistogram_summary 是否尊重 name_scope
【发布时间】:2016-03-03 00:36:29
【问题描述】:

当我尝试为按程序生成的多层网络写出直方图摘要时,出现重复标记错误。我认为这个问题可能与命名有关。想象如下代码:

with tf.name_scope(some_unique_name):
  ...
  _ = tf.histogram_summary('weights', kernel_weights)

我天真地假设“权重”的范围是 some_unique_name,但我怀疑它不是。摘要名称是否独立于 name_scope?

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    作为Dave points out, tag 参数tf.histogram_summary(tag, ...) 确实独立于当前名称范围。部分原因是tag 可能是字符串Tensor(即由图形的一部分计算),而名称范围是纯粹的客户端构造(即仅限 Python),所以没有什么好处使范围界定在两种使用模式下始终如一地工作的方法。

    但是,如果您使用的是从源代码构建的 TensorFlow(并且应该在下一个版本 0.8.0 中可用),您可以使用以下配方来确定您的标签范围(使用 Graph.unique_name(..., mark_as_used=False)):

    with tf.name_scope(some_unique_name):
      # ...
      tf.histogram_summary(
          tf.get_default_graph().unique_name('weights', mark_as_used=False),
          kernel_weights)
    

    或者,您可以在当前版本中执行以下操作:

    with tf.name_scope(some_unique_name) as scope:
      # ...
      tf.histogram_summary(scope + 'weights', kernel_weights)
    

    【讨论】:

    • 有趣。谢谢 - 我怀疑 name_scope 并不是图表的一部分。我确实在 GitHub 上记录了一个错误,但我想这毕竟不是一个错误。必须随身携带范围,这有点令人遗憾。请问unique_name构造什么样的名字?
    • 它应用与将name="foo" 作为参数传递给操作构造函数时使用的完全相同的逻辑。 (即,它将"foo" 附加到当前名称范围,并可能添加"_1""_2" 等以使其在当前范围内唯一。)如果这证明是有用的,我们可以创建一个实用方法,使更容易访问。
    【解决方案2】:

    他们是。

    我和你一样认为这是一个错误,但我还没有通过 op 的设计者运行它。继续在 GitHub 上为它打开一个问题!

    (我也遇到过这个问题,发现它非常烦人——它阻止了模型的重用,而没有故意参数化摘要操作调用。)

    【讨论】:

    • 我很快在我的代码中添加了一个唯一的名称层,重复标签错误消失了,所以这绝对是它发生的原因。
    猜你喜欢
    • 2013-08-18
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2012-06-10
    相关资源
    最近更新 更多