python - 在 Estimator API 中使用指标时,PR 曲线插件 (pr_curve_raw_data_op) 未完全绘制
问题描述
TensorBoard 版本(来自 pip 包,运行时也打印出来tensorboard
):1.12.0 TensorFlow 版本如果与 TensorBoard 不同:1.12.0 操作系统平台和版本(例如,Linux Ubuntu 16.04):Arch Linux Python 版本(例如 2.7、3.5): 3.6.5
你好呀,
我正在尝试使用pr_curve_raw_data_op
具有精度、召回率和其他指标的函数来绘制 PR 曲线,但我在图表中得到了错误的结果。我正在使用 Estimator API,这意味着我创建了自己的字典,其中包含 tupletf.Tensor
和tf.Operation
实例,然后将其转发给 estimator 以转储摘要。
我在每个检查点保存期间评估多个步骤,这意味着我通过多个步骤累积精度和召回(但我不使用 pr_curves 插件这样做,我使用自定义的书面指标),我想要从插件中转储PR曲线进入张量板。这是用于将pr-curves
摘要张量存储到度量字典中的代码部分:
metrics_dict['pr_curve/CLASS_{}'.format(cls_index)] = (
summary.raw_data_op(
'pr_curve/CLASS_{}'.format(cls_index),
true_positive_counts=tps,
false_positive_counts=fps,
true_negative_counts=tns,
false_negative_counts=fns,
precision=precisions,
recall=recalls,
num_thresholds=11
),
tf.no_op()
)
我还尝试将精度转储为文本摘要,以确保终端中打印的输出与存储在摘要中的输出相同,并且我使用以下代码转储了这些摘要:
metrics_dict['precisions_text/CLASS_{}'.format(cls_index)] = (
tf.summary.text(name="aa",
tensor=tf.as_string(precs)),
tf.no_op()
)
最后附上几张截图。第一个显示转储到文本摘要的精度及其值(我只显示了前 6 个值,其余 4 个值为 0.0):
第二个屏幕截图包含在 PR 曲线上绘制的相同类别和步骤的相同精度:
您可以看到图上只有第一个点,0.0 召回的精度为 1.0。这种情况发生在更多的情况下,以及图表在最后一点被切断(例如,我的召回率从 0.0 到 0.6 的精度值,但图表仅达到 0.5)。
解决方案
推荐阅读
- java - 使用 Jackson,您如何将 JSON 解组为 Java Map,但有一个特定的嵌套成员作为域实例?
- python - 我可以在同一安装的 anaconda 上运行 Python 2.7 和 Python 3.6 构建吗?如何?
- neo4j - Neo4j/GraphQL 增强模式
- java - 从 url 下载图像时附加换行符
- rust - 吸气剂中的可变借用寿命不够长
- apache-spark - 数据框 withColumn 函数
- sql-server - TSQL-选择一列但将其显示更改为另一个查询的字符串
- bash - 在 Grep 命令末尾附加一个运算符以设置为 Bash 变量
- node.js - 使用 ExpressJS 的 PassportJS 多租户
- ios - 删除特定部分中的 UITableView 单元格