是否可以根据其值省略 Tensorflow 标量摘要?
Is it possible to omit a Tensorflow scalar summary dependant on its value?
我构建摘要操作并将它们添加到集合中,然后在 training/validation 期间始终将摘要集合作为 sess.run
调用的一部分进行评估。
但是,在某些情况下,该值为 nan
,这会使 Tensorboard 图表变坏。 (三角形而不是数据点,并且平滑不适用于中间的 nan 值)。
有没有办法根据值是否有效从集合中省略特定摘要?我可以用零或类似值替换 nan 值,但任何人为选择的值都会污染真实报告的统计数据。
我这样添加摘要:
tf.summary.scalar('scc_precision_test', precision_test, [Constants.TEST_SUMMARIES])
谢谢!
您可以在将摘要写入 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=...)
如果您将多个摘要合并到一个 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=...)
我构建摘要操作并将它们添加到集合中,然后在 training/validation 期间始终将摘要集合作为 sess.run
调用的一部分进行评估。
但是,在某些情况下,该值为 nan
,这会使 Tensorboard 图表变坏。 (三角形而不是数据点,并且平滑不适用于中间的 nan 值)。
有没有办法根据值是否有效从集合中省略特定摘要?我可以用零或类似值替换 nan 值,但任何人为选择的值都会污染真实报告的统计数据。
我这样添加摘要:
tf.summary.scalar('scc_precision_test', precision_test, [Constants.TEST_SUMMARIES])
谢谢!
您可以在将摘要写入 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=...)
如果您将多个摘要合并到一个 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=...)