Keras 图像分类问题

Keras Image Classification Problems

我正在为多class 问题研究图像class化模型。我启动模型并 运行,但是当我尝试 predict/test 模型时,它似乎只能识别 4 种图像类型中的一种(无论如何,它都是相同的 class我改变了模型)。我每个 class 的数据集很小,但我确实使用 imagegenerator 来增加数据量。该模型应该能够识别图片上添加了一些噪声的图像。

我的挑战可以归结为:

  1. 数据量小。每个 class.
  2. 我有 < 100 张图片
  3. 我的模型不应该找到具体的图形,而是图片中更多的整体图案(具有特定颜色的区域等)。
  4. 许多图片包含大量的白色和文字。我需要任何图像预处理来帮助模型吗?

我的模型是这样的:

model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same', activation='relu', input_shape=(s1,s2,3), data_format = "channels_first"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(50, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))

model.compile(loss='categorical_crossentropy',
          optimizer='Adam',
          metrics=['accuracy'])

img 大小为 250,250,批量大小为 16。

检查acc和loss曲线

acc curve

loss curve

大家有什么建议吗?

提前致谢!

这是经典的过度拟合。您需要严格限制您的模型 and/or 使用迁移学习来对抗这种行为。对于约束选项,您可以增加 dropout 并添加 l2 正则化。根据我的经验,l2 正则化确实使 NN 的问题变得困难。对于迁移学习,您可以使用 resnet 并只训练最后 2-3 层。

然而,没有什么比拥有更多的数据点更好的了。