如何在TensorFlow中提高CNN的预测能力?

时间:2018-09-07 00:38:21

标签: python tensorflow deep-learning conv-neural-network

我正在TensorFlow中使用具有两个卷积层,单个完全连接层和线性层的CNN来预测对象的大小。标签是尺寸,特征是图像。

为了评估网络的性能,我使用了五重交叉验证。我使用TensorBoard绘制训练集和交叉验证集的准确性。

两者的准确性都增加了,但是交叉验证的准确性却增加得更慢。考虑到精度差异是由于模型过度拟合造成的,我尝试使用L2正则化对权重进行正则化。但是,这只是降低了训练准确性,而交叉验证准确性的趋势却保持不变。交叉验证的准确性始终保持在50%以下。

谁能推荐一些我可能会考虑提高交叉验证准确性并因此提高模型预测能力的方法?非常感谢。

without regularization训练精度为灰色,交叉验证精度为绿色。

with regularization训练准确性为蓝色,交叉验证准确性为红色。

1 个答案:

答案 0 :(得分:0)

过度拟合有多种补救措施。仅举几例:

  • 正则化:您可以尝试添加Dropout图层并查看模型的运行方式,而不是L2正则化。脱落层会在训练过程中使某些神经元失活,从而迫使模型也依赖于其他神经元。
  • 数据扩充:有多种技术可以扩充您的训练数据。您可以使用图像处理技术生成新图像,也可以使现有图像更加“ CNN友好”。要搜索的一些关键字包括数据居中和规范化/标准化,zca增白,传统图像处理(例如缩放/裁剪,反转,滤色器,移位/倾斜,扭曲和旋转功能)以及NN-based data augmentation techniques
  • 模型架构:更改模型架构会导致较高的(过度拟合)或较低的(欠拟合)通用性损失。对层数,卷积核的大小进行实验,并考虑使用诸如Inception v3,AlexNet,GoogLeNet,VGG-16等预先训练的网络(转移学习)。

当然还有一百万种其他方法,但这是一个很好的起点。