添加验证摘要

Add validation summary

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

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 的重复标签,即 train_opvalid_op 都使用了 inference,这会导致 [=] 重复19=] 总结。

我怎样才能完成这项工作?我需要的是 运行 使用相同的函数 inference 进行训练和验证 inference

正如错误提示的那样,您不能有两个具有相同标签的摘要。在您的情况下会发生这种情况,因为您使用相同的标记两次调用 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

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

来过滤它们