使用fit_generator

时间:2017-10-27 19:08:27

标签: machine-learning deep-learning keras kaggle keras-2

关于为什么 our training loss is smooth and our validation loss is that noisy (see the link) across epochs?的任何想法我们正在使用由提供的眼底照片数据集实施糖尿病视网膜病变检测的深度学习模型(二元分类this Kaggle competition。我们使用 Keras 2.0 Tensorflow 后端。

由于数据集太大而无法容纳在内存中,我们正在使用fit_generatorImageDataGenerator随机从培训和验证文件夹中获取图像:

# TRAIN THE MODEL
model.fit_generator(
    train_generator,
    steps_per_epoch= train_generator.samples // training_batch_size,
    epochs=int(config['training']['epochs']),
    validation_data=validation_generator,
    validation_steps= validation_generator.samples // validation_batch_size,
    class_weight=None)

我们的CNN架构是VGG16,在最后两个完全连接的层中丢失= 0.5,仅在第一个完全连接的层之前进行批量归一化,以及数据增强(包括水平和垂直翻转图像)。我们的训练和验证样本使用训练集平均值和标准差进行标准化。批量大小为32.我们的激活是sigmoid,损失函数是binary_crossentropyYou can find our implementation in Github

它绝对与过度拟合无关,因为我们尝试使用高度正规化的模型并且行为完全相同。 是否与验证集中的抽样相关?您之前是否有过类似的问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

我会按此顺序查看:

  • validation_generator实施中的错误(包括步骤-是否会经过所有保留用于验证的图片?)
  • 在validation_generator中,不要使用增强(原因:增强可能是不好的,是无法学习的,并且在训练中,仅通过无法泛化的硬编码关系确实可以获得良好的分数)
  • 将火车/ val比例更改为50/50
  • 通过自定义回调计算在纪元末尾的验证损失(使用相同的函数,但通过回调调用会产生不同的结果(在某些非标准模型中更为准确))

如果以上内容均未提供更平滑的验证损失曲线,那么我的下一个假设将是这样,并且我可能需要研究模型架构