【发布时间】:2020-06-15 23:01:02
【问题描述】:
更新:将旋转范围增加到 180,添加了 GaussianNoise。查看代码
我正在使用 CNN 进行图像分类。我在训练数据集中有 2 张 3500 级灰度照片,每个在验证数据集中有 1000 张。问题是首先 5-10 个 epoch 训练 acc 并且有效 acc 正在增加,但随后有效 acc 开始急剧下降,而 train 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 我尝试过的处理过度拟合的列表:
- 图像增强
- 减少层数和神经元数
- 洗牌训练图像生成器
- 辍学
- 提前停止
- 调整学习率
- 更多数据(仍在收集,不知道什么时候)
我不知道还有什么我错过的。欢迎所有的cmets。 提前谢谢你
【问题讨论】:
-
看起来肯定是过拟合了,你检查过吗? stackoverflow.com/questions/36139980/…
-
如您所见,我尝试了大多数建议,例如 dropout、缩小网络、增强等。现在我正在尝试带来更多数据,看看是否会有任何不同。
-
你过拟合了。你可以尝试降低你的 CNN 复杂度;例如减少层数或神经元数。还要检查训练集和验证集是否以随机方式分割
-
感谢您的评论。我也减少了层数和神经元的数量,但仍然得到几乎相同的输出。我忘记在训练和有效图像生成器中添加但 shuffle=True。
标签: python tensorflow machine-learning keras deep-learning