Warning: Use of undefined constant php - assumed 'php' (this will throw an Error in a future version of PHP) in /data/htdocs/405817461.host.smartgslb.com/wp-content/themes/twentytwelve/content.php on line 1

对LeCun的CNNs方法测试出现的问题

本文是我在20140904的周报。本周对CNNs的原理进行了深入理解,并进行了Matlab源码的实现。

在原文中,LeCun通过三个卷积层,三个下采样层,20次训练,在MNIST手写数字库(28*28*60000训练集,28*28*10000测试集)的训练下,能够达到训练集99.65%的准确率,测试集99.05%的准确率,而通过图像畸变人工产生540000额外数据集,能够使测试集的分类准确率达到99.2%。

实现的结果是,在MNIST手写数字库(28*28*60000训练集,28*28*10000测试集)的训练下,利用两层卷积神经网络的卷积(特征图数分别为6和18)和两层下采样,经过5次训练之后,能够使分类准确率稳定在96%左右。

因为LeCun未在论文中提出每次卷积的特征图数量的选取理由,故对CNNs所提出Map数量控制进行了的进行参数调整,如表1(C1代表第一层卷积的特征图数量,C2代表第二次卷积的特征图数量,每个单位两个数值分别为在此参数下训练一次所需时间和训练完成的准确率)。

注:训练次数均为5次

 
C2
36121824
C1221s8.14%32s6.37%44s5.23%57s4.74%78s5.02%
330s7.01%40s6.15%58s4.15%72s4.54%92s4.37%
660s6.62%85s5.50%120s4.67%148s3.95%174s4.24%
12114s7.83%173s5.22%226s4.37%265s3.96%327s3.76%
表1 错误率根据特征图的变化关系

上述实验证明,在C1确定后,C2在一定条件下,特征图越多,准确率越高,但在达到该组合的最优值之后,会再向上浮动。

在MNIST手写数字库的数据集下,第一层卷积选用6个特征图,第二层选用18个特征图,能够得到相对最优值的近似值。

在实验过程中,遇到了一些问题。

  1. 因为梯度下降的初始值是随机设定的,所以在训练过程中,由于初始值的不同,经过相同训练次数,准确率会在一定范围内波动,具有一定的随机性,这样在卷积层特征图数量和训练次数越来越多的情况下,即使进行优化,不能确定是否得到了更优值。
  2. 在训练得到的均方误差变化图(如图1、图2)中,理论上应该是一个斜率依次递减的单调递减函数,但图中却出现了明显的拐点。

5times c6 c18

图1 C1=6、C2=18时的均方误差变化图像

5times c12 c24

图2 C1=12、C2=24时的均方误差变化图像

但是在LeCun的论文中,说有可能会在测试集的测试过程中错误率波动,但在自己的训练集中不会出现明显波动,这一点暂时没发现症结所在。

PrintEvernoteQQFacebookTwitterGoogle+分享