Tensorboard 提高准确度得分

Posted

技术标签:

【中文标题】Tensorboard 提高准确度得分【英文标题】:Tensorboard bump in accuracy score 【发布时间】:2018-10-14 15:17:00 【问题描述】:

我一直在使用 Tensorflow 训练我的 Inception ResNet V2,并通过 TensorBoard 记录准确度/损失等。

现在,当我今天恢复训练时,在恢复之前停止的检查点时,我的准确率几乎立即(在几个全局步骤中)从 86% 提高到 97%。

查看损失图时,它似乎还在逐渐降低,但准确度有这个巨大的提升。对此有明显/合乎逻辑的解释吗? 我在第 21 个 epoch(在 20 停止)恢复了训练,每个 epoch 有 1339 个全局步数。

【问题讨论】:

训练集的大小是多少?你在平滑精度吗? 训练大小为16k图像,我使用正常的tf.contrib准确率,每一步都保存到tensorboard 【参考方案1】:

那是因为您使用的是流式准确度,它会累积从时间开始以来的所有统计数据——嗯,是训练时间。

在您停止训练之前,流式传输准确度一直在返回自开始以来的平均准确度。

当您恢复训练时,流式准确度操作已重置,现在输出您恢复训练后的平均准确度。它要高得多,因为当您的模型较弱时,它不会与较早的较低准确度值进行平均。

我实际上posted something yesterday 讨论了如何不时重置流指标以避免这种持续积累。

【讨论】:

感谢您对您之前帖子的参考,将研究它!【参考方案2】:

我认为贡献的准确性是问题所在。

https://github.com/tensorflow/tensorflow/issues/9498。

它不会重置,因此您的准确度基本上是该点所有准确度的平均值。当您重新加载图表时,此运行平均值已重置。好消息,您的网络训练得很好。

【讨论】:

【参考方案3】:

正如@P-Gn 在接受的答案中指出的那样,这是因为 tf.metrics 都是设计的流式指标。

您可以重置流指标,或者,如果您只关心单个批次的准确性,您可以使用简单的函数:

def non_streaming_accuracy(predictions, labels):
    return tf.reduce_mean(tf.cast(tf.equal(predictions, labels), tf.float32))

【讨论】:

以上是关于Tensorboard 提高准确度得分的主要内容,如果未能解决你的问题,请参考以下文章

使用python代码读取准确性而不是tensorboard

Pytorch Note53 TensorBoard 可视化

如何使用 Tensorboard 检查训练模型的准确性?

使用交叉验证提高准确性,不使用交叉验证降低准确性

在 Colab 上运行 TensorBoard

如何使用 Detectron2 的 tensorboard 获得测试准确性?