已更新:将旋转范围增加到180,增加了GaussianNoise。查看代码
我正在使用CNN进行图像分类。我在训练数据集中有2张3500级灰度照片,在验证数据集中有1000张灰度照片。问题是首先5到10个时期的火车acc和有效acc不断增加,但是有效acc却开始减少,因此在火车acc不断增加的同时急剧下降。
我看到这是因为过拟合,但我也尝试通过在ImageDataGenerator.
中放入一些参数来处理过拟合
train_image_generator = ImageDataGenerator(rescale=1. / 255,
rotation_range=180,
width_shift_range=.15,
height_shift_range=.15,
horizontal_flip=True,
fill_mode='nearest',
shear_range=0.05,
zoom_range=0.5
)
我还把Dropout
层放在了CNN架构中。
model = Sequential([
GaussianNoise(0.01, input_shape=(IMG_HEIGHT, IMG_WIDTH, 1)),
Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH, 1)),
Dropout(0.7),
MaxPooling2D(),
Conv2D(32, 3, padding='same', activation='relu'),
Dropout(0.7),
MaxPooling2D(),
Dropout(0.5),
Conv2D(64, 3, padding='same', activation='relu'),
Dropout(0.7),
MaxPooling2D(),
Dropout(0.5),
Flatten(),
Dropout(0.7),
Dense(512, activation='relu'),
Dense(2, activation='softmax')
])
我已经设置了学习率:
adamOpti = Adam(lr=0.00005)
model.compile(optimizer=adamOpti,
loss="categorical_crossentropy",
metrics=['accuracy'])
即使我也设置了EarlyStopping:
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=200)
mc = ModelCheckpoint('best_model.h5', monitor='val_acc', mode='max', verbose=1, save_best_only=True)
TL,DR我为交易过拟合尝试的清单:
我不知道还有什么我想念的。欢迎所有评论。 预先谢谢你
答案 0 :(得分:0)
我建议从图像增强过程开始。向图像添加模糊,旋转,噪点,剪切等,以使模型不会一遍又一遍地看到同一组图像。尽管感觉很直观,但是您需要通过增加多样性来使模型更难。这将使它更好地概括。
还要确保您的班级不高度不平衡(最大班级的图像数量不超过最小班级图像的数量的10倍)。这是为了确保您的批次中没有一个班级人数过多。如果您在一类中拥有比其他类更多的图像,请从较大的类中删除一些图像,或者为较小的类收集更多图像(或生成以某种方式增强的新图像),直到每个图像上的图像数量更多为止课。
最后,如果您的硬件支持的话,您可以增加批量大小,从而增加每批图像的多样性。
编辑:
您似乎只有两个班级,而且他们是平衡的。我建议尝试将图像增强作为第一种方法(旋转,模糊,噪点,剪辑,偏斜)