基于CNN的二元分类器设计
Design of the binary classifier based on CNN
我设计了 CNN 来对图像进行分类,以达到自动质量控制的目的。输入图像为 320 x 320 像素。我有 5 个转换层,具有 512 个输出的 FC 层和只有两个输出的最后一层:'good' 或 'bad'。质量控制必须以 1.0 的精度完成。我正在使用张量流。
我是 CNN 的初学者,我在评估我的模型时遇到了问题。虽然我确实在训练集上获得了 1.0 的精度,有时在验证集上也获得了 1.0 精度,但我担心成本函数的值。我的模型输出非常大的 logits,如果我对这些 logits 进行 softmax,我总是得到 'good' 或 'bad' 的 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 只是过度拟合?你辍学会有帮助吗?
问题是过度拟合。为了解决它,有一些想法:
- 增加训练数据集,收集更多数据或基于现有数据集生成转换后的图像。
- 涉及正则化,L1/L2正则化、batch norm、dropout 会有所帮助。
- 考虑使用预训练模型,即所谓的Transfer Learning, refer to this tutorial。
我设计了 CNN 来对图像进行分类,以达到自动质量控制的目的。输入图像为 320 x 320 像素。我有 5 个转换层,具有 512 个输出的 FC 层和只有两个输出的最后一层:'good' 或 'bad'。质量控制必须以 1.0 的精度完成。我正在使用张量流。
我是 CNN 的初学者,我在评估我的模型时遇到了问题。虽然我确实在训练集上获得了 1.0 的精度,有时在验证集上也获得了 1.0 精度,但我担心成本函数的值。我的模型输出非常大的 logits,如果我对这些 logits 进行 softmax,我总是得到 'good' 或 'bad' 的 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 只是过度拟合?你辍学会有帮助吗?
问题是过度拟合。为了解决它,有一些想法:
- 增加训练数据集,收集更多数据或基于现有数据集生成转换后的图像。
- 涉及正则化,L1/L2正则化、batch norm、dropout 会有所帮助。
- 考虑使用预训练模型,即所谓的Transfer Learning, refer to this tutorial。