基于CNN的二元分类器设计.



我设计了CNN来对图像进行分类,以便进行自动质量控制。输入图像为 320 x 320 像素。我有 5 个卷积层,FC 层有 512 个输出,最后一层只有两个输出:"好"或"坏"。质量控制必须以1.0的精度进行。我正在使用张量流。

我是CNN的初学者,我在评估我的模型时遇到了问题。虽然我在训练集上确实得到了 1.0 的准确率,有时在验证集上也得到了 1.0 的准确率,但我担心成本函数的值。我的模型输出非常大的对数,如果我对这些对数进行软最大化,我总是得到 100% 的"好"或"坏"概率。因此,如果我的模型正确预测了示例,则成本(按 cross_entropy_with_logits 计算)为 0。如果所有训练示例都正确预测,则权重不再更改,并且我的模型不会提高验证集的性能。

以下是我的模型的示例输出(包含 10 个示例的批处理):

Logits
[[ 2169.41455078  2981.38574219]
[ 2193.54492188  3068.97509766]
[ 2185.86743164  3060.24047852]
[ 2305.94604492  3198.36083984]
[ 2202.66503906  3136.44726562]
[ 2305.78076172  2976.58081055]
[ 2248.13232422  3130.26123047]
[ 2259.94726562  3132.30200195]
[ 2290.61303711  3098.0871582 ]
[ 2500.9609375   3188.67456055]]
Softmax:
[[ 0.  1.]
[ 0.  1.]
[ 0.  1.]
[ 0.  1.]
[ 0.  1.]
[ 0.  1.]
[ 0.  1.]
[ 0.  1.]
[ 0.  1.]
[ 0.  1.]]
cost calculated with tf.nn.softmax_cross_entropy_with_logits
[ 811.97119141    0.          874.37304688    0.          933.78222656
670.80004883    0.            0.          807.47412109    0.        ]

你认为这里的问题是什么?我的 CNN 对于应用程序来说太复杂了,输出 100% 的概率?我的CNN只是过度拟合?你辍学会有帮助吗?

问题是过度拟合。为了解决这个问题,有一些想法:

  1. 增加训练数据集,收集更多数据或基于现有数据集生成转换后的图像。
  2. 涉及正则化,L1/L2正则化,批量范数,辍学会有所帮助。
  3. 考虑使用预训练模型,即所谓的迁移学习,请参阅本教程。

最新更新