【问题标题】:How can I implement confidence level in a CNN with tensorflow?如何在带有 tensorflow 的 CNN 中实现置信度?
【发布时间】:2025-11-28 12:55:04
【问题描述】:

我的 CNN 输出一组值,我必须检查其中最大的一个并将其作为预测类别。示例:

-148.7290802 , -133.90687561,  -90.850914  , -135.78356934,
    -128.6325531 , -125.76812744,  -85.41909027,  -72.3269577 ,
    -103.51300812

对于类索引 6。

现在,我怎样才能得到这个结果的信心?

我的设置是:

predict_op = [tf.argmax(py_x,1), py_x]
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(py_x, Y))
train_op = tf.train.RMSPropOptimizer(learningRate, decayRate).minimize(cost) 

更新后的代码现在返回:[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]]

predict_op = tf.nn.softmax(py_x)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(py_x, Y))
train_op = tf.train.RMSPropOptimizer(learningRate, decayRate).minimize(cost) 

【问题讨论】:

  • 你的返回值就是你分配给train_op的值?
  • 不,train_op 是训练的张量。预期的返回值在 Y 中。对于测试预测,我正在评估返回值的 predict_op

标签: python neural-network tensorflow conv-neural-network


【解决方案1】:

在最后阶段应用softmax;这将在最后阶段产生后验概率。您已经在设置中使用了 softmax;只需在最终向量上使用它即可将其转换为 RMS 概率。该预测的置信度只是顶部项目的概率。

如需快速说明,请参阅泛化和统计下的Wikipedia page。本节还描述了模型的整体置信度。

【讨论】:

  • 我不需要softmax的输出值吗?
  • 应用 softmax 后,我得到 [[ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]] [[ 0. 0 . 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]] 应该是0-1之间吧?
  • 我对此感到困惑:您应用 SoftMax 代替之前的评估,现在您有 13 个值而不是 9 个???
  • 抱歉,我已更改数据集以进行测试。它与以前一样返回,但现在有 13 个。
  • 有没有办法获得实际的浮点值,而不仅仅是 1 和零?\
【解决方案2】:

Yarin Gal disagrees with the accepted answer: “顺便说一句,使用 softmax 获得概率实际上不足以获得模型不确定性” “这是因为标准模型会通过 softmax 而不是整个分布传递预测均值。”,和他举了一个例子来说明这一点:“如果你给我几张猫和狗的照片——然后你让我对一张新的猫照片进行分类——我应该以相当高的信心返回一个预测。但如果你给我一张照片一只鸵鸟,并强迫我的手来决定它是猫还是狗——我最好以非常低的置信度返回一个预测。”

He suggests 一种基于 dropout 的方法,其中在查询时,您通过随机 dropout 前馈几次并观察答案的分散情况。我强烈推荐阅读the blog post,以严格处理一般的不确定性,尤其是深度网络中的不确定性。

不幸的是,我还不是一个 TensorFlow 忍者,无法确切地知道如何实现这一点,并在脑海中给出了一些聪明的代码。

【讨论】:

    最近更新 更多