【发布时间】:2018-07-28 11:01:53
【问题描述】:
我正在研究 Keras 中的图像分类问题。
我正在使用 model.fit_generator 训练模型以进行数据增强。
在每个 epoch 进行训练的同时,我也在评估验证数据。
对 90% 的数据进行训练,对 10% 的数据进行验证。以下是我的代码:
datagen = ImageDataGenerator(
rotation_range=20,
zoom_range=0.3)
batch_size=32
epochs=30
model_checkpoint = ModelCheckpoint('myweights.hdf5', monitor='val_acc', verbose=1, save_best_only=True, mode='max')
lr = 0.01
sgd = SGD(lr=lr, decay=1e-6, momentum=0.9, nesterov=False)
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
def step_decay(epoch):
# initialize the base initial learning rate, drop factor, and
# epochs to drop every
initAlpha = 0.01
factor = 1
dropEvery = 3
# compute learning rate for the current epoch
alpha = initAlpha * (factor ** np.floor((1 + epoch) / dropEvery))
# return the learning rate
return float(alpha)
history=model.fit_generator(datagen.flow(xtrain, ytrain, batch_size=batch_size),
steps_per_epoch=xtrain.shape[0] // batch_size,
callbacks[LearningRateScheduler(step_decay),model_checkpoint],
validation_data = (xvalid, yvalid),
epochs = epochs, verbose = 1)
但是,在绘制训练准确度和验证准确度(以及训练损失和验证损失)时,我注意到验证准确度高于训练准确度(同样,验证损失低于训练损失)。这是我训练后的结果图(请注意,验证在图中称为“测试”):
当我不应用数据增强时,训练准确度高于验证准确度。据我了解,训练准确度通常应该高于验证准确度。任何人都可以提供见解,为什么在我应用数据增强的情况下不是这种情况?
【问题讨论】:
-
您认为数据增强可能是罪魁祸首,这似乎是合理的。但是,您能否澄清一下:您是否在没有数据增强的情况下尝试过这个?如果是这样,那么训练损失和验证损失如何比较?
-
当我不应用数据增强时,训练准确率高于验证准确率....现在包含在帖子中。
-
从您的代码中并不完全清楚,但看起来您没有对验证数据应用任何数据扩充。这是正确的吗?
-
这是正确的...我没有对验证数据应用数据扩充
-
我认为这就是问题所在。请看下面我的回答。 TL;DR 数据增强有时使模型的任务更加困难。如果您也增加验证数据,您应该会看到一切恢复正常。
标签: machine-learning deep-learning keras