Keras 图像分类问题
Keras Image Classification Problems
我正在为多class 问题研究图像class化模型。我启动模型并 运行,但是当我尝试 predict/test 模型时,它似乎只能识别 4 种图像类型中的一种(无论如何,它都是相同的 class我改变了模型)。我每个 class 的数据集很小,但我确实使用 imagegenerator 来增加数据量。该模型应该能够识别图片上添加了一些噪声的图像。
我的挑战可以归结为:
- 数据量小。每个 class.
我有 < 100 张图片
- 我的模型不应该找到具体的图形,而是图片中更多的整体图案(具有特定颜色的区域等)。
- 许多图片包含大量的白色和文字。我需要任何图像预处理来帮助模型吗?
我的模型是这样的:
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 层。
然而,没有什么比拥有更多的数据点更好的了。
我正在为多class 问题研究图像class化模型。我启动模型并 运行,但是当我尝试 predict/test 模型时,它似乎只能识别 4 种图像类型中的一种(无论如何,它都是相同的 class我改变了模型)。我每个 class 的数据集很小,但我确实使用 imagegenerator 来增加数据量。该模型应该能够识别图片上添加了一些噪声的图像。
我的挑战可以归结为:
- 数据量小。每个 class. 我有 < 100 张图片
- 我的模型不应该找到具体的图形,而是图片中更多的整体图案(具有特定颜色的区域等)。
- 许多图片包含大量的白色和文字。我需要任何图像预处理来帮助模型吗?
我的模型是这样的:
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 层。
然而,没有什么比拥有更多的数据点更好的了。