我正在研究图像像素分类问题并使用数据增强(在Keras中) .
所以我将数据转换(旋转,翻转)应用于图像补丁 . 我的CNN数据增强和训练代码如下 .
datagen = ImageDataGenerator(
rotation_range=40,
horizontal_flip=True,
vertical_flip=True,
)
batch_size=16
epochs=50
# compile the model
model.compile(loss='categorical_crossentropy',
optimizer=Adam(),
metrics=['accuracy'])
model_checkpoint = ModelCheckpoint('myweights.hdf5', monitor='val_acc', verbose=1, save_best_only=True, mode='max')
callbacks_list = [plot_losses,model_checkpoint]
history=model.fit_generator(datagen.flow(x_train, y_train, batch_size=batch_size),
steps_per_epoch=x_train.shape[0] // batch_size,
callbacks=callbacks_list,
validation_data = datagen.flow(x_valid, y_valid, batch_size=batch_size),
validation_steps=x_valid.shape[0] // batch_size,
epochs = epochs, verbose = 1)
我的火车/验证准确性和损失情节如下:
我可以看到准确性和损失率普遍持续增加,这正是我们想要的 . 但它在20个时代中非常缓慢 . 没有数据增加,我的准确性会更快 .
那么为什么数据增加导致如此缓慢的学习过程(大约48%到58%的训练/有效准确度在20个时期内增加)?
我使用 Adam optimizer
使用指数学习率衰减,所以我不相信新的学习率计划会影响很大,除非我遗漏了什么 . 任何见解都是受欢迎的 .
1 回答
当您的模型使用数据扩充来训练较慢时,预计会出现这种情况 . 增强翻转,旋转并通常转换图像以扩大我们的数据集 . 这是通过比GPU慢的CPU完成的 .
我们使用增强不是为了速度而是为了提高准确性 .