我正在研究一个用于多类问题的图像分类模型。我可以启动并运行模型,但是当我尝试预测/测试模型时,它似乎只能识别4种图像类型中的1种(无论我如何更改模型,它都是同一类)。我每班的数据集很小,但是我确实使用imagegenerator来增加数据量。该模型应该能够识别出图像上带有一些噪点的图像。
我的挑战可以归结为:
我的模型如下:
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。
检查加速曲线和损耗曲线
你们有什么建议吗?
谢谢!
答案 0 :(得分:0)
这是经典的过拟合。您需要严格约束模型和/或使用迁移学习来应对这种行为。对于约束选项,您可以增加辍学并添加l2正则化。以我的经验,正规化确实使NN很难解决这个问题。对于转移学习,您可以使用resnet并仅训练最后的2-3层。
但是,拥有更多数据点是最重要的。