【问题标题】:Add validation summary添加验证摘要
【发布时间】:2016-07-05 15:31:42
【问题描述】:

如何向张量板添加验证?我已经为图层编写了一个包装器,例如:

def convolution(input_data, kernel_shape, strides, activation, name=None):
    with tf.name_scope(name):
        kernel = tf.Variable(tf.truncated_normal(kernel_shape, stddev=stddev), name="weights")
        bias = tf.Variable(tf.zeros([kernel_shape[-1]]), name="biases")

        conv = tf.nn.conv2d(input=input_data, filter=kernel, strides=strides, padding="SAME", name="convolutions")
        result = activation(tf.nn.bias_add(conv, bias), name="activations")

    tf.scalar_summary(name + "/mean", tf.reduce_mean(kernel))    
    return result

并在main 中使用summary_op = tf.merge_all_summaries()。我还实现了train_opvalid_op,它们都调用inference 函数。但是,出现了一个错误,即我们有重复的 scalar_summary 标签,即inference 用于train_opvalid_op,这会导致重复,例如conv1/mean 摘要。

我怎样才能做到这一点?我需要的是使用相同的函数inference 运行训练和验证。

【问题讨论】:

    标签: tensorflow tensorboard


    【解决方案1】:

    正如错误提示的那样,您不能有两个具有相同标签的摘要。在您的情况下会发生这种情况,因为您使用相同的标记调用 tf.scalar_summary 两次,一次是在构造 train_op 时,一次是在构造 valid_op 时。这是一个可能的解决方案: 您可以在inference 函数中添加一个标志,例如is_training,以指示正在调用代码来构建训练图的一部分。您必须将该标志线程化到所有图层功能。例如,在convolution 中,您应该执行以下操作:

    if is_training:
      tf.scalar_summary(name + "/mean", tf.reduce_mean(kernel))
    return result
    

    构造train_op时,传递is_training=True,构造valid_op时,传递is_training=False。在 Inception 模型中有一个这样的编程模式here 的例子。

    【讨论】:

    • 所以解决方案只是在验证时明确避免摘要。我正在考虑这种方法,但希望有一个更聪明的方法。无论如何,谢谢你的帮助!
    • 另一个问题是:使用这种方法,TEST 摘要将被添加到 TRAIN 摘要中。我可以通过“test/”标签封装测试摘要并使用单独的summary_writer。但是有没有一种聪明的方法来管理摘要?
    【解决方案2】:

    另一种方法是对摘要使用不同的名称范围,然后通过 merge_summary 的范围参数而不是 merge_all_summaries 过滤它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多