在学习paddle的手写数字识别Demo时发现一个有趣的现象
首先是网络结构
一层卷积, 一层池化
第二层卷积, 第二层池化
全连接.
前向计算部分:
我期间把这个网络结构的softmax去掉了, 发现准确率上升的非常快, 很快会达到0.99, 并且已经使用验证集与测试集分别测试过了, 应该并不是过拟合
这是有softmax的准确率:
有softmax的结构准确率一直在0.7-0.85之间徘徊, 大量训练上升效果有限, 非常好奇为嘛少了softmax反而快了这么多. 我就把训练过程中的包含softmax和不包含softmax的训练中前向计算的结果打印出来:
softmax:
无softmax:
根据数值对比发现相对于softmax的结果, 非softmax的正确与错误结果差距更大, softmax基本区间0-1, 而非softmax的差距有时能达到30. 所以我推测是训练途中softmax导致数据的区分特征(数值差异)不够明显导致训练效果低下, 我尝试在softmax情况下拉大正确与错误结果的距离来复现非softmax的效果:
用来扩大正确答案与错误答案的距离.
其实softmax最终的训练结果也是能达到0.99甚至1.0, 但是需要时间很长. 我这种方法相当于把每次训练的步子拉大. 也算一种优化过程中的一种