训练神经网络时出现的问题

在做手写体识别时发现了一个问题

一共有5500张分类为A,B,C,D,E的手写体

5000张做训练,500张做测试

97.5% MODEL

输入是32 × 32 ×1的矩阵

第一层是10个2 × 2 × 1 的卷积核: strides=[1, 1, 1, 1], padding='SAME'

然后做最大值池化: ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME'

激活函数: tanh
 
 

第二层是16个2 × 2 × 10 的卷积核: strides=[1, 1, 1, 1], padding='SAME'

然后做最大值池化: ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME'

扫描二维码关注公众号,回复: 96759 查看本文章
激活函数: tanh

第三层是32个2× 2 × 16 的卷积核: strides=[1, 1, 1, 1], padding='SAME'

然后做最大值池化: ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME'

激活函数: tanh
 
最后做一个全连接层
输出时 1×5的向量
激活函数: softmax
 
训练后在验证集上的模型精度为97.5%
 
 
 
之后改变模型

98.3% MODEL

输入是32 × 32 ×1的矩阵

第一层是10个5 × 5 × 1 的卷积核: strides=[1, 1, 1, 1], padding='SAME'

然后做最大值池化: ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME'

激活函数: tanh
 
 

第二层是16个5 × 5 × 10 的卷积核: strides=[1, 1, 1, 1], padding='SAME'

然后做最大值池化: ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME'

激活函数: tanh

第三层是32个2× 2 × 16 的卷积核: strides=[1, 1, 1, 1], padding='SAME'

然后做最大值池化: ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME'

激活函数: tanh
 
最后做一个全连接层
输出时 1×5的向量
激活函数: softmax
 
训练是精度在达到98.3%后出现过拟合
最终保存下来的模型时97.9的
 
可以看见,将前两个卷积核改大了一点
因为想着,因为手写体小范围的特征比较简单,只有大范围才能看出区别
 
 
魔改,最终版98.7%模型
 

输入是32 × 32 ×1的矩阵

第一层是10个5 × 5 × 1 的卷积核: strides=[1, 1, 1, 1], padding='SAME'

然后做最大值池化: ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME'

激活函数: relu
 
 

第二层是16个5 × 5 × 10 的卷积核: strides=[1, 1, 1, 1], padding='SAME'

然后做最大值池化: ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME'

激活函数: relu

第三层是32个2× 2 × 16 的卷积核: strides=[1, 1, 1, 1], padding='SAME'

然后做最大值池化: ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME'

激活函数: tanh
 
最后做一个全连接层
输出时 1×5的向量
激活函数: softmax
 
训练是精度在达到98.7%后出现过拟合
最终保存下来的模型时98.7%的
 
可以看见,将前两个激活函数改为了 relu
因为最后时softmax,所以想用tanh保留负数
对于前两个,因为是对特征的初步提取
使用relu可以去掉一些不必要的东西
 
 
 

猜你喜欢

转载自www.cnblogs.com/shensobaolibin/p/8977584.html