【发布时间】: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