我正在研究图像像素分类问题并使用 数据增加(在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
,所以我不相信新的学习率计划会影响很大,除非我遗漏了什么。任何见解都是受欢迎的。
答案 0 :(得分:2)
使用数据增强模型训练速度较慢时,预计会出现这种情况。增强翻转,旋转并通常转换图像以扩大我们的数据集。这是通过比GPU慢的CPU来完成的。
我们使用扩充不是为了提高速度,而是为了提高准确性。