我正在尝试使用本博客第一部分中建议的架构构建一个 2 类图像分类器https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html
我的数据集有 1500 个类别 1 的图像和 500 个类别 2 的图像。我创建了 4 个 class2 副本,以使两个类中的图像数量相同。
我还使用 ImageDataGenerator 来增强图像
datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
shear_range=0.2,
zoom_range=0.5,
rotation_range=45,
horizontal_flip=True,
vertical_flip=True)
datagen.fit(train_imgs)
我正在使用 AdaDelta、RMSProp、SGD、Adam、AdaGrad 优化器并尝试添加/删除 Conv2D 和 Dense 层。尝试了 BatchNormalizationa 和 Dropout。结果几乎相同:
在最初的几个 epoch(大约 20 个)训练和验证错误不断减少,直到 log loss 达到大约 0.4(到目前为止我得到的最好),之后模型开始过度拟合并且验证损失不断增加。
我知道我可以通过降低网络复杂性和增加 dropout 来防止过度拟合,但这也会降低训练的准确性。
请提出一些提示以提高准确性并避免过度拟合。