我在玩卷积网络。具体来说,我使用的是kaggle cats-vs-dogs数据集,该数据集包含25000张标记为猫或狗的图像(每张图像12500张)。
我设法在测试集上实现了约85%的分类精度,但是我设定了达到90%的精度的目标。
我的主要问题是过度拟合。它总是以某种方式最终发生(通常在第8-10阶段之后)。我的网络体系结构受到VGG-16的大致启发,更具体地说,我的图像被调整为,然后运行:
Convolution 1 128x128x32 (kernel size is 3, strides is 1)
Convolution 2 128x128x32 (kernel size is 3, strides is 1)
Max pool 1 64x64x32 (kernel size is 2, strides is 2)
Convolution 3 64x64x64 (kernel size is 3, strides is 1)
Convolution 4 64x64x64 (kernel size is 3, strides is 1)
Max pool 2 32x32x64 (kernel size is 2, strides is 2)
Convolution 5 16x16x128 (kernel size is 3, strides is 1)
Convolution 6 16x16x128 (kernel size is 3, strides is 1)
Max pool 3 8x8x128 (kernel size is 2, strides is 2)
Convolution 7 8x8x256 (kernel size is 3, strides is 1)
Max pool 4 4x4x256 (kernel size is 2, strides is 2)
Convolution 8 4x4x512 (kernel size is 3, strides is 1)
Fully connected layer 1024 (dropout 0.5)
Fully connected layer 1024 (dropout 0.5)
除最后一层外,所有层均具有关联作为激活功能。
请注意,我尝试了卷积的不同组合(我从更简单的卷积开始)。
另外,我还通过镜像图像来扩充数据集,因此总共有50000张图像。
另外,我正在使用最小最大规格化对图像进行规格化,其中X是图像
该代码以tensorflow编写,批处理大小为128。
训练数据的小批量最终过度拟合,并且具有100%的准确度,而验证数据似乎在84-85%左右停止学习。
我也尝试增加/减少辍学率。
使用的优化器是AdamOptimizer,学习率为0.0001
目前,我在过去3周中一直在处理此问题,而85%的人似乎已经在我面前设置了障碍。
作为记录,我知道我可以使用迁移学习来取得更高的成绩,但是我很高兴将这个网络构建为一种自学的体验。
更新:
我正在以不同的批处理大小运行SAME网络,在这种情况下,我使用的批处理大小要小得多(从16代替128),到目前为止,我达到了87.5%的准确性(而不是85%)。也就是说,网络最终还是会过度拟合。仍然我不明白50%的退学率对您没有帮助...显然我在这里做错了。有任何想法吗?
更新2:
似乎问题与批次大小有关,例如,较小的批次(从16而不是128)与我的测试设备相比,我现在可以达到92.8%的准确度,而较小的批次仍然使网络无法适应(最终迷你批次最终(精度为100%),但损耗(误差)不断减小,并且总体上更加稳定。缺点是运行时间要慢得多,但是完全值得等待。