我正在使用ConvNet对从一系列灰度红外图像(二进制分类)中裁剪的对象进行分类。网络输入具有大小(WxHxN),其中N> 1。 3。
数据集很小,只有1-1.5K样本用于培训。因此,我使用的是一个相对较小的ConvNet(32,32,64,64,128,128,256,256 + FC 512),最后3层有丢失(0.5);使用带有 TensorFlow 的tflearn和/或keras实现。我还使用数据增强(随机模糊,水平翻转,随机旋转)。
当我将 Adam优化器与learning_rate = 1e-4 一起使用时,它会在几个时期内收敛到99%的训练精度和非常小的损失,但验证丢失仍然存在增加和准确度波动很大。最终,测试集的性能约为50-60%,几乎与随机猜测(二进制分类)相同。
我尝试了L2权重正则化,批量归一化;不同的批量大小,较小的网络等。但是,它没有用。
现在,我正在探索各种优化算法。似乎tflearn.optimizers.Nesterov(learning_rate=2e-3, momentum=0.9, lr_decay=0.90, decay_step=100)
,学习速度慢得多,但更顺畅;验证错误不会像以前那样增加,准确性不会大幅改变(大多数情况下,缓慢增加或保持不变)。准确性更好,50个时期约为60%,100个时期约为70%。
现在的问题是:似乎优化算法(及其参数)的选择会影响过度拟合。但是,我还没有看到任何关于此的工作。是否有任何工作/论文/博客详细阐述了这个问题?你有经验可以分享吗?哪种优化算法适用于小型数据集,并且更好地处理过度拟合?