添加验证摘要
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_op
和 valid_op
,它们都调用了 inference
函数。然而,出现了一个错误,我们有 scalar_summary 的重复标签,即 train_op
和 valid_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.
来过滤它们
如何向 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_op
和 valid_op
,它们都调用了 inference
函数。然而,出现了一个错误,我们有 scalar_summary 的重复标签,即 train_op
和 valid_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.
来过滤它们