Python 为什么对于一个图像类,我的Keras预测总是接近100%?

Python 为什么对于一个图像类,我的Keras预测总是接近100%?,python,tensorflow,keras,deep-learning,computer-vision,Python,Tensorflow,Keras,Deep Learning,Computer Vision,我正在使用Keras(在tf2.3之上)来训练一个图像分类器。在某些情况下,我有两个以上的类,但通常只有两个类(“好”或“坏”)。我使用tensorflow.keras.applications.VGG16类作为基础模型,顶部有一个自定义分类器,如下所示: input\u layer=layers.input(shape=(self.image\u size,self.image\u size,3),name=“model\u input”) 基本模型=VGG16(权重=“imagenet”,包

我正在使用Keras(在tf2.3之上)来训练一个图像分类器。在某些情况下,我有两个以上的类,但通常只有两个类(“好”或“坏”)。我使用
tensorflow.keras.applications.VGG16
类作为基础模型,顶部有一个自定义分类器,如下所示:

input\u layer=layers.input(shape=(self.image\u size,self.image\u size,3),name=“model\u input”)
基本模型=VGG16(权重=“imagenet”,包括顶部=假,输入张量=输入层)
模型头=基本模型输出
模型头=层。平均池2D(池头大小=(4,4))(模型头)
模型头=层。展平()(模型头)
模型头=层。密集(256,activation=“relu”)(模型头)
模型头=层。辍学(0.5)(模型头)
model\u head=layers.Dense(len(self.image\u类),activation=“softmax”)(model\u head)
正如您在最后一层(输出)中所看到的,我正在使用
softmax
激活功能。然后用
分类交叉熵
损失函数编译整个模型,并用一个热编码图像数据(标签)进行训练

总的来说,模型的性能相当好,我对结果感到满意,我用我们的数据集实现了99%以上的测试和验证精度。但有一件事我不明白:

当我在Keras模型上调用
predict()
并查看预测结果时,它们总是0或1(或者至少非常非常接近,比如0.000001和0.999999)。因此,我的分类器似乎非常确定图像属于“好”还是“坏”两个类(例如,如果我只使用两个类)。然而,我的假设是,这些预测通常不是那么清晰,更多的是“模型认为这幅图像属于a类的概率为80%”,但正如我在案例中所说的,它总是100%确定的


你知道为什么会这样吗?

你的两个类可能非常容易区分。尝试使用具有一些共同特征的图像进行预测。

这是神经网络的一个常见研究问题,它们会做出过度自信的预测,这与Keras甚至编程都没有关系。不,在我们的数据集中,这两类图像看起来几乎相同。只需尝试以下两个步骤:1)删除“AveragePoolig2D()直接使用“展平()。2) 使用“BatchNormalization()”。然后请告诉我结果。我删除了
averagepoolig2d
层,并按照您的建议直接从
flatte
开始。但是,当我在该模型上调用
set_weights()
从磁盘加载预先训练的权重时,我得到以下错误:“ValueError:Layer weight shape(25088256)与提供的权重shape(512,256)不兼容”。知道我如何解决htis吗?你必须再次找到新的“权重”,因为你已经改变了网络,所以早期的权重文件将无法工作。因此,重新训练网络。