是否可以根据其值省略Tensorflow标量摘要?

Ash*_*all 3 tensorflow tensorboard

我建立摘要操作并将其添加到集合中,然后sess.run在培训/验证期间始终将摘要集合作为调用的一部分进行评估。

但是,在某些情况下,值是nan,这会使Tensorboard图变坏。(用三角形代替数据点,并且平滑度不适用于介于两者之间的nan值)。

有没有一种方法可以根据值的有效性从集合中省略特定的摘要?我可以将nan值替换为零或类似值,但是任何人为选择的值都会污染报告的真实统计信息。

我添加如下摘要: tf.summary.scalar('scc_precision_test', precision_test, [Constants.TEST_SUMMARIES])

谢谢!

jde*_*esa 5

您可以先检查摘要的值,然后再将其写入FileWriter

prec_test = tf.summary.scalar('scc_precision_test', precision_test,
                              [Constants.TEST_SUMMARIES])
# ... 
..., prec_test_sum = sess.run([..., prec_test], ...)
prec_test_sum = tf.Summary().FromString(prec_test_sum)
if np.isfinite(prec_test_sum.value[0].simple_value):
    writer.add_summary(prec_test_sum.SerializeToString(), global_step=...)
Run Code Online (Sandbox Code Playgroud)

如果您有多个摘要合并到一个tf.Summary对象中(例如,用tf.summary.merge/ 制成tf.summary.merge_all),则必须过滤该value字段:

prec_test = tf.summary.scalar('scc_precision_test', precision_test,
                              [Constants.TEST_SUMMARIES])
merged = tf.summary.merge_all(key=Constants.TEST_SUMMARIES)
# ... 
..., merged_sum = sess.run([..., merged], ...)
merged_sum = tf.Summary().FromString(merged_sum)
# Reversed traversal to be able to delete elements while iterating correctly
for i, value in reversed(list(enumerate(merged_sum.value))):
    # Discard summary if is scalar and not finite
    if value.WhichOneof('value') == 'simple_value' and not np.isfinite(value.simple_value):
        del merged_sum[i]
# Write all valid summaries
writer.add_summary(merged_sum.SerializeToString(), global_step=...)
Run Code Online (Sandbox Code Playgroud)