添加验证摘要

时间:2016-07-05 15:31:42

标签: tensorflow tensorboard

如何向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

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

我该如何使这项工作?我需要使用相同的函数inference运行训练和验证。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

相关问题