Python 如何在tensorflow中获得模型信心?

Python 如何在tensorflow中获得模型信心?,python,tensorflow,keras,Python,Tensorflow,Keras,我采用预训练的模型,在定制数据集上对其进行训练,该数据集包含3个类,softmax激活作为输出层。我在测试集上获得了91%的准确率,但问题是。我希望我的CNN能够说“我不知道图像上有什么”。这将有助于解决两个问题: 误分类 没有任何类的图像。我在图像上搜索蛇,希望能够说图像上没有蛇 我使用softmax获得了奇怪的结果: [[0.05 0.89 0.05]] [[0.05 0.89 0.05]] 第一个图像是第二类的,所以模型正确,但第二个图像并没有已知的类,但模型非常确定有。我怎样才能得

我采用预训练的模型,在定制数据集上对其进行训练,该数据集包含3个类,softmax激活作为输出层。我在测试集上获得了91%的准确率,但问题是。我希望我的CNN能够说“我不知道图像上有什么”。这将有助于解决两个问题:

  • 误分类
  • 没有任何类的图像。我在图像上搜索蛇,希望能够说图像上没有蛇
我使用softmax获得了奇怪的结果:

[[0.05 0.89 0.05]]
[[0.05 0.89 0.05]]
第一个图像是第二类的,所以模型正确,但第二个图像并没有已知的类,但模型非常确定有。我怎样才能得到更接近真实概率的东西? 模型在分类方面并不差,它总是得到0.85-0.89的值

我的第一个想法是添加另一个图像上没有蛇的类。但这是一个相当肮脏的解决方案。
检测/分割在这方面有帮助吗?

文献中众所周知,大多数CNN没有输出经过良好校准的概率:换句话说,softmax的“概率”输出通常与正确的真实可能性没有很好的相关性。例如,参见郭等人关于该问题的一些背景

最近,人们对贝叶斯深度学习技术越来越感兴趣,它可以模拟认知不确定性,即模型本身的不确定性,并且有很多有趣的论文可以阅读,例如Kendall和Gal的(还有一些来自Kendall的幻灯片,读起来稍微轻松一些)


你可以尝试郭等人的温度标度技术,这似乎在一定程度上改善了预测。

可以研究贝叶斯神经网络。它们以标准神经网络无法做到的方式洞察模型的不确定性。是的,为此,您需要使用具有适当不确定性量化的模型,如贝叶斯神经网络。以下是一个示例。它是用tensorflow-probability实现的。请注意,这不是编程问题,它更适合AI堆栈交换。不知道AI堆栈交换,但现在知道了,谢谢。试图深入研究贝叶斯神经网络,这似乎就是我所需要的,似乎模型应该用tfp层来编写?所以,我不能使用那个模型,我需要改变它的架构或者从头开始写一个神经网络?