【问题标题】:Why is my Keras prediction always close to 100% for one image class?为什么我的 Keras 预测对于一个图像类总是接近 100%?
【发布时间】:2020-11-25 11:21:24
【问题描述】:

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

input_layer = layers.Input(shape=(self.image_size, self.image_size, 3), name="model_input")
base_model = VGG16(weights="imagenet", include_top=False, input_tensor=input_layer)
model_head = base_model.output
model_head = layers.AveragePooling2D(pool_size=(4, 4))(model_head)
model_head = layers.Flatten()(model_head)
model_head = layers.Dense(256, activation="relu")(model_head)
model_head = layers.Dropout(0.5)(model_head)
model_head = layers.Dense(len(self.image_classes), activation="softmax")(model_head)

正如您在最后(输出)层中看到的,我使用了softmax 激活函数。然后我使用categorical_crossentropy 损失函数编译整个模型,并使用 one-hot-encoded 图像数据(标签)进行训练。

总而言之,该模型的性能非常好,我对结果感到满意,我的数据集测试和验证准确率超过 99%。不过有一点我不明白:

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

任何想法为什么会出现这种情况?

【问题讨论】:

  • 这是神经网络的一个常见研究问题,它们会做出过度自信的预测,这与 Keras 甚至编程无关。

标签: python tensorflow keras deep-learning computer-vision


【解决方案1】:

您的两个班级可能非常有区别。尝试使用具有一些共同特征的图像进行预测。

【讨论】:

  • 不,在我们的数据集中,这两个类别的图像看起来几乎相同。
  • 只需尝试以下两个步骤:1)删除'AveragePooling2D()'并直接使用'Flatten()'。 2)使用'BatchNormalization()'。那么请告诉我结果。
  • 我删除了AveragePooling2D 层,并按照您的建议直接从Flatten 开始。但是,当我在该模型上调用 set_weights() 以从磁盘加载预训练的权重时,出现以下错误:“ValueError:层权重形状 (25088, 256) 与提供的权重形状 (512, 256) 不兼容”。知道如何解决 htis 吗?
  • 你必须再次找到新的“权重”,因为你已经改变了网络,所以早期的权重文件将不起作用。所以重新训练网络。
猜你喜欢
  • 2020-10-10
  • 1970-01-01
  • 2020-10-28
  • 2021-11-08
  • 2018-01-04
  • 2016-10-18
  • 2020-05-22
  • 1970-01-01
  • 2018-08-24
相关资源
最近更新 更多