使用 keras 的 CNN 进行多类分类 - 训练有素的模型即使在全白图片中也能预测对象

数据挖掘 喀拉斯 张量流 多类分类 美国有线电视新闻网
2022-02-17 07:31:13

我在 CNN 中使用 keras 和后端的 Tensorflow 在 CNN 中构建了一个多分类。它很好地预测了猫和狗。然而,当涉及到一张没有任何物体的图像时——白色背景图像——它仍然会找到一只狗(假设狗类的概率为 0.75……,猫为 0.24……)。我是一个使用神经网络构建的学习新手。

对不起,如果我问了一个愚蠢的问题,即使我已经搜索了互联网,我也找不到任何答案。

在白色背景图像作为预测方法输入的情况下,我的例外是狗和猫类的概率为 0。

任何建议都会让我很高兴。

以下是我实施培训的方式。

classifier = Sequential()

classifier.add(Conv2D(32, 3, 3, input_shape=(64, 64, 3), activation='relu'))
classifier.add(MaxPool2D(pool_size=(2, 2)))

classifier.add(Conv2D(32, 3, 3, activation='relu'))
classifier.add(MaxPool2D(pool_size=(2, 2)))

classifier.add(Flatten())

classifier.add(Dense(units=128, activation='relu'))

classifier.add(Dense(units=2, activation='softmax'))

# Metrics will be categorical_accuracy
classifier.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])


from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1. / 255)
training_set = train_datagen.flow_from_directory(
    '/Users/ozercevikaslan/Desktop/Convolutional_Neural_Networks/dataset/training_set',
    target_size=(64, 64),
    batch_size=32,
    class_mode='categorical')

test_set = test_datagen.flow_from_directory(
    '/Users/ozercevikaslan/Desktop/Convolutional_Neural_Networks/dataset/test_set',
    target_size=(64, 64),
    batch_size=32,
    class_mode='categorical')

classifier.fit_generator(
    training_set,
    steps_per_epoch=8000,
    epochs=25,
    validation_data=test_set,
    validation_steps=2000)
4个回答

在 categorical_crossentropy 中,预测的总和等于 1,在您的情况下是猫或狗,

  • 可能使用准确度阈值,(或)为未知数(狗/猫以外的其他图像)添加第三类。

正如我在我的问题帖子中提到的,即使对于新学习者来说,这个帖子也有点傻。在这种情况下,世界只有 2 个类别,即狗和猫,因此输出必须是狗或猫。

正如其他人已经说过的,你强迫模型选择一个或另一个。如果你不想要这个,那么你可以使用 sigmoid 而不是 softmax 作为最后一层的激活函数。

但请注意,除了为这两个类别分配低概率之外,该模型还可以为这两个类别分配高概率。您将需要考虑如何处理和解释它。

我认为一种可能的解决方案是训练一个模型,试图在三个类别之间进行预测,即“猫”、“狗”和“其他”之间。

当然,在这种情况下,您还需要使用第三类的示例来训练模型,例如使用随机图片(也可能包括白色背景图像)。