处理过度拟合:数据放大,交叉验证,轮换扩充

时间:2016-12-23 08:05:25

标签: machine-learning rotation cross-validation

目前,我正在探索由tflearn(VGG.Net,GoogLeNet,ResNet等)提供的网络并将其应用于我的数据集(128 * 128单通道图像,925图像 - 增强前,5058图像 - 增强后,两类 - 癌症和非癌症)。

  1. 问题:训练准确度(~100%)与验证准确度(约70%)之间存在很大差异。

  2. 我的方法:1)通过减少卷积内核的数量来降低模型复杂度,2)减少完全连接层中的节点数量,3)扩大FC的辍学率。

  3. 问题:

  4. 1)这种过度拟合的问题是否已经发生 - 至少在某种程度上 - 由于数据集不足(训练)? 我想如果我有更多(训练)数据集,这将足以代表母分布(包括验证数据集),以便验证准确性与训练准确性相似。

    2)交叉验证是否有助于减少差异?但是,如果我有一个永远不会用作训练集的测试集,我认为我的测试acc仍然会与训练acc有很大不同。这是对的吗?

    3)据我所知,由于卷积是移位不变的,因此移位增加不会提供新的信息。轮换怎么样? (在切割ROI之前旋转,使图像在边界处不包含零)

    谢谢! :d

2 个答案:

答案 0 :(得分:2)

  1. 不,如果您不更改训练数据集的大小,则不会。但是,交叉验证通常用于将更多数据用作培训数据。
  2. 旋转只有在数据集中存在时才有用。例如,180°旋转实际上可能会造成伤害。
  3. 标准图像的良好扩充可以在tensorflow CIFAR10 example

    中找到
    • tf.random_crop(reshaped_image, [height, width, 3])
    • tf.image.random_flip_left_right(distorted_image)
    • tf.image.random_brightness(distorted_image, max_delta=63)
    • tf.image.random_contrast(distorted_image, lower=0.2, upper=1.8)

    为了对抗过度拟合,你可能想引入正规化;特别是Dropouttf.nn.dropout)。

    但是,它不必过度拟合。也可能是您的测试数据的分布与您的训练数据不同(但更有可能过度拟合)。

答案 1 :(得分:0)

我的2美分:

  1. 交叉验证可能有帮助(或没有帮助)。这取决于。

CV背后的想法是重新采样有限的可用训练数据并平均模型的准确性。 想象一下没有应用CV且测试数据中存在巨大异常值的情况(在考虑训练数据时将其忽略)。该模型偏斜,可能会导致异常。