Keras图像分类问题

时间:2018-08-06 10:09:28

标签: python machine-learning keras deep-learning image-recognition

我正在研究一个用于多类问题的图像分类模型。我可以启动并运行模型,但是当我尝试预测/测试模型时,它似乎只能识别4种图像类型中的1种(无论我如何更改模型,它都是同一类)。我每班的数据集很小,但是我确实使用imagegenerator来增加数据量。该模型应该能够识别出图像上带有一些噪点的图像。

我的挑战可以归结为:

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

我的模型如下:

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 curve

loss curve

你们有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

这是经典的过拟合。您需要严格约束模型和/或使用迁移学习来应对这种行为。对于约束选项,您可以增加辍学并添加l2正则化。以我的经验,正规化确实使NN很难解决这个问题。对于转移学习,您可以使用resnet并仅训练最后的2-3层。

但是,拥有更多数据点是最重要的。