目前,我正在探索由tflearn(VGG.Net,GoogLeNet,ResNet等)提供的网络并将其应用于我的数据集(128 * 128单通道图像,925图像 - 增强前,5058图像 - 增强后,两类 - 癌症和非癌症)。
问题:训练准确度(~100%)与验证准确度(约70%)之间存在很大差异。
我的方法:1)通过减少卷积内核的数量来降低模型复杂度,2)减少完全连接层中的节点数量,3)扩大FC的辍学率。
问题:
1)这种过度拟合的问题是否已经发生 - 至少在某种程度上 - 由于数据集不足(训练)? 我想如果我有更多(训练)数据集,这将足以代表母分布(包括验证数据集),以便验证准确性与训练准确性相似。
2)交叉验证是否有助于减少差异?但是,如果我有一个永远不会用作训练集的测试集,我认为我的测试acc仍然会与训练acc有很大不同。这是对的吗?
3)据我所知,由于卷积是移位不变的,因此移位增加不会提供新的信息。轮换怎么样? (在切割ROI之前旋转,使图像在边界处不包含零)谢谢! :d
答案 0 :(得分:2)
标准图像的良好扩充可以在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)
为了对抗过度拟合,你可能想引入正规化;特别是Dropout(tf.nn.dropout
)。
但是,它不必过度拟合。也可能是您的测试数据的分布与您的训练数据不同(但更有可能过度拟合)。
答案 1 :(得分:0)
我的2美分:
CV背后的想法是重新采样有限的可用训练数据并平均模型的准确性。 想象一下没有应用CV且测试数据中存在巨大异常值的情况(在考虑训练数据时将其忽略)。该模型偏斜,可能会导致异常。