本发明涉及深度学习网络模型压缩领域,更具体地,涉及一种改进深层卷积神经网络的参数个数的方法。
背景技术:
卷积神经网络是深度学习在图像处理方面的应用,相比与其他机器学习算法如svm,卷积神经网络泛化性强,且能够对图像像素进行卷积并提取特征,也能够利用海量图像数据将网络参数训练充分,以达到更高的效果。然而网络参数过多,计算量也大大增加,对硬件要求也增加,往往需要跟多的数据,而且训练时间往往指数式增长。
技术实现要素:
本发明目的在于提供一种改进深层卷积神经网络的参数个数的方法,保持识别率的同时,旨在解决现有的网络参数过多而导致计算量增加的问题。
为实现上述目的,本发明采取的技术方案为:
一种改进卷积神经网络的参数个数的方法,所述方法包括如下步骤:深度卷积神经网络的构建,深层卷积神经网络的改进,深层卷积神经网络的训练及测试,优化网络各层参数;
深层卷积神经网络框架的构建:在vggnet-16网络基础上,通过逐层分析网络层的方法设计一个具有14层网络的深层卷积神经网络,其包括图像输入层、conv5x5卷积层、max-pool2x2池化层、conv3x3卷积层、conv3x3卷积层、max-pool2x2池化层、conv3x3卷积层、conv3x3卷积层、conv3x3卷积层、max-pool2x2池化层、conv3x3卷积层、conv3x3卷积层、conv3x3卷积层、max-pool2x2池化层、conv3x3卷积层、conv3x3卷积层、conv3x3卷积层、max-pool2x2池化层、conv1x1、fc全连接层、输出分类层softmax;
深层卷积神经网络的改进:由随机下采样方式、全链接层使用逐层训练的方法、maxout激活函数的方法三个方面对深层卷积神经网络进行改进。
深层卷积神经网络的训练及测试:深层卷积神经网络的训练流程有前向与反向传播两个步骤,利用逐层训练的方法进行深层卷积神经网络的训练;
优化网络参数:通过对batch、dropout相关网络参数进行优化,以减轻训练网络事后出现的过拟合现象。
进一步的,在深层卷积神经网络的构建时,其中对底层conv15x5卷积层设计方法如下:图像输入层的输出作为conv15x5的输入,图像输入层对输入的原始图像进行卷积处理,输入的原始图像为32*32像素的三通道彩色图,图像输入层的卷积核大小是3*3,卷积核有64个且将卷积核的滑动步长设置为1,经过上述参数的卷积处理后得到一个大小仍为32*32为像素的特征图,维数为64,然后再通过padding补偿得到特征映射图的大小仍然是32*32,维数是64;其次,再通过池化降采样处理,该池化处理为最大池化处理方法,池化层卷积核的大小设置为2*2,滑动步长设置为2,经过降采样处理后,输出的特征映射图的大小为16*16像素,维数为64;最后在输入到下一个卷积层之前做bn预处理;
其中对conv1卷积层的设计方法如下:block的输出作为conv1x1的输入。首先,经过卷积处理。此层的卷积核为1024个,卷积核大小是3*3,然后增加了边缘补偿处理(padding),补偿值为像素;经过补偿处理后得到一个大小为9*9像素的特征图,其维数为1024。然后采用maxout激活函数得到的特征映射图的大小是8*8,维数是1024。最后采用平均池化层的方法,池化层卷积核的大小设置为3*3,滑动步长为2,输出的特征映射图的大小为4*4,维数为128.本层没有进行bn处理。
其中对全连接层fc的设计方法如下:conv1x1的输出作为fc全连接层的输入,输入4*4像素的特征图,设置fc的全连接层的神经元数为1024,然后采用maxout激活函数,输出神经数1024,最后采用dropout处理方式;
进一步的,深层卷积神经网络的改进:由随机下采样方式、全链接层使用逐层训练的方法、maxout激活函数的方法三个方面对深层卷积神经网络进行改进;
(1)采用随机下采样方法
根据特征映射中元素概率值的大小进行随机选择,概率值越大,该元素被选中的概率也就越大。
(2)全连接层使用逐层训练的方法
(3)tensorflow会支持自动编码网络,所以全连接层可以使用自动编码网络的训练方式。
(3)采用maxout激活函数的方法
使用maxout激活函数来代替vgg所采用的relu函数,其数学表达
式如下:
hi(x)=max(zij),j∈[1,k]
zij=xtwij+bij,w∈rd×m×k
表达式中的hi(x)表示隐含层节点的输出,i表示第i个输出节点,x表示输入的特征向量;zij为一个中间矩阵,w是一个大小为(d,m,k)三维矩阵,b是一个大小为(m,k)的二维矩阵,a为常数;d表示输入节点个数,k为每一个隐含层节点所对应的k个“隐含层”节点,m代表隐含层的节点个数,maxout激活函数是让这个k个“隐含层”节点中输出值是最大的那个值为每个隐含节点的值。
进一步的,在进行深层卷积神经网络的训练及测试时,训练阶段的算法流程如下:
输入:训练集
误差阈值
最大迭代次数num
输出:网络权重
步骤:
初始化w,b
step1begin
step2从训练集中随机选取一个批次(batch),输入到网路模型中;
step3训练前向传播,进行conv卷积计算:
step4进行特征提取运算;
step5直到输入到全连接层
step6全连接层提取特征,输入到softmaax函数进行分类,选取概率最大的作为分类结果;
step7计算误差,进行误差反向传播;
step8网络参数更新;
step9直到所有的batch都训练完毕;
step10保存模型参数(save());
其测试阶段的算法流程如下:
输入:测试集
输出:分类结果
步骤:
初始化:网络权重:w,b,训练好的网络值
step1begin
step2进行特征提取运算;
step3直到输入到全连接层
step4全连接层提取特征,输入到softmaax函数进行分类,选取概率最大的作为分类结果;
step5判断比较标签与分类结果,并统计分类结果;
step6直到所有的batch全部测试完毕;
step7求所有结果的均值。
进一步的优化网络参数包括,
设定batch的值,采取不同的batch小数据集进行训练,在经历多次试验后可以得到batch的范围,如要停止训练,要当损失函数的值低于预定的阂值,测试五次后取平均值最大程度避免偶然事件突发;
还包括,
扩充数据集,在深度学习方法中,为了训练出更好的网络模型,就需要充足的训练数据并采用更深层的网络,对于扩充数据集,既简单又有效的方法就是对原始数据进行扩充,通过对原始数据进行改动,可以得到更多的数据,对于图片数据而言,扩充其数据最简单的方法就是调整图片的角度。
与现有技术相比,本发明技术方案的有益效果是:
本发明提供了一种改进深层卷积神经网络的参数个数的方法,本通过对卷积神经网络结构的改进、减少了网络层数,缩减优化了网络参数,有效地降低模型复杂度的同时,保持了模型原有的识别率,大大减少训练所有时间,减少硬件需求。
附图说明
图1为本发明所构建的深层卷积神经网络结构图;
图2为conv15x5卷积层的设计流程图;
图3为conv1x1卷积层的设计流程图;
图4为全连接fc层的设计流程图;
图5为输出分类层设计流程图。
具体实施方式
下面结合附图和实施例对本发明的技术方案做进一步的说明。
本发明实施例提供了一种改进深层卷积神经网络的参数个数的方法,包括如下步骤:深层卷积神经网络的构建,深层卷积神经网络的改进,深层卷积神经网络的训练及测试,优化网络参数;
1.深层卷积的神经网络的构建:在vggnet-16网络基础上,通过逐层分析网络层的方法设计一个具有14层网络的深层卷积神经网络,其包括图像输入层、conv5x5卷积层、max-pool2x2池化层、conv3x3卷积层、conv3x3卷积层、max-pool2x2池化层、conv3x3卷积层、conv3x3卷积层、conv3x3卷积层、max-pool2x2池化层、conv3x3卷积层、conv3x3卷积层、conv3x3卷积层、max-pool2x2池化层、conv3x3卷积层、conv3x3卷积层、conv3x3卷积层、max-pool2x2池化层、conv1x1、fc全连接层、输出分类层softmax;
从图1可以清晰的看出该深层卷积神经网络的模型结构,比原网络模型参数降低了1/10其网络参数,如表1所示:
表1网络模型参数
1.1底层conv15x5卷积层设计
conv15x5卷积层的流程图设计如图2所示。首先,输入原始图像进行卷积处理,其中该图像的大小为32*32像素的三通道彩色图,该层的卷积核大小是3*3,卷积核有64个且将卷积核的滑动步长设置为1,经过以上参数的卷积处理之后得到了一个大小为32*32像素的特征图,且其维数为64。然后,再通过padding补偿得到的特征映射图的大小仍然是32*32维数是64,激活函数是一种分段的线性函数,它反应的是整体的而不是单一的输入与输出的非线性映关系,其能有效的增强网络的表达能力。其次,再通过池化降采样处理,该池化处理为最大池化处理方法,池化层卷积核的大小设置为2*2,滑动步长设置为2,经过降采样处理后,其输出的特征映射图的大小为16*16像素,且维数为64。最后,在输入到下一层卷积层之前做一个batchnormalization即bn预处理。预处理不仅能够有效的解决训练过程中,层与层之间的数据分布发生改变的问题,而且它能随机化样本数据,有效的避免了每批训练时某一个样本总是被选到的概率。
1.2顶层conv1x1卷积层的设计
conv1x1卷积层的流程设计如图3示。block的输出也就是conv1x1的输入。首先,也是经过卷积处理。此层的卷积核为1024个,卷积核大小也是3*3,该层也增加了边缘补偿处理(padding),补偿值为像素。经过上述处理后得到一个大小为9*9像素的特征图,其维数为1024。然后采用maxout激活函数得到的特征映射图的大小是8*8,维数是1024。最后采用平均池化层的方法,池化层卷积核的大小设置为3*3,滑动步长为2,输出的特征映射图的大小为4*4,且维数为128.本层没有进行bn处理。
1.3全连接层fc的设计
fc层的设计流程如图4示。conv1x1的输出就是fc全连接层的输入,输入特征图的大小为4*4像素。首先,设置fc的全连接层的神经元数为1024,然后采用maxout激活函数,输出神经数为1024,采用dropout处理方式,这种处理方式的好处在于既能够有效的防止过拟合,也能大大降低训练时间。
1.4输出分类层设计
输出分类层流程设计如图5示。本层分类器选用的是softmax分类器,根据训练样本的不同来确定神经节点的个数。对于cifar-10图像数据库来说,其节点设置为10,对于cifar-100图像数据库来说,其神经节点数要设置为100。
2.卷积层及全连接层的改进
由三个方面对深层卷积神经网络做出改进,分别是随机下采样的采样方法、全连接层逐层训练的方法、maxout激活函数。
随机下采样方法就是对特征映射中的元素根据它的概率值的大小进行随机选择,如果值越大,该元素被选中的概率也就越大。随机下采样的方式相对vgg-net的最大值下采样,会更加符合生物神经元的处理方式,避免了最大值百分之百被选中,只不过是被选中的概率会更大一些。
(2)卷积神经网络初始化常常会要求初始化的数据会服从某一类分布,这样能避免网络对称性的发生,然而这种类型的初始化方式会使得网络参数的初始化起点处于不确定性。逐层训练方法会克服概率不确定性的缺点,这样会使得网络初始化参数处于一个确定性高的起点。tensorflow会支持自动编码网络,所以全链接层可以使用自动编码网络的训练方式。
(3)采用maxout激活函数的方法
sigmoid函数或者tanh函数是传统的卷积神经网络所采用的神经元激活函数。我们使用maxout激活函数来代替vgg所采用的relu函数,其数学表达式如下:
hi(x)=max(zij),j∈[1,k]
zij=xtwij+bij,w∈rd×m×k
表达式中的hi(x)表示隐含层节点的输出,i表示第i个输出节点,x表示输入的特征向量;zij为一个中间矩阵,w是一个大小为(d,m,k)三维矩阵,b是一个大小为(m,k)的二维矩阵,a为常数;d表示输入节点个数,k为每一个隐含层节点所对应的k个“隐含层”节点,m代表隐含层的节点个数,maxout激活函数是让这个k个“隐含层”节点中输出值是最大的那个值为每个隐含节点的值。利用maxout函数强大的拟合能力,会拟合出我们所需要的任意凸函数。
maxout函数与relu函数的实现原理十分类似,可以弥补目前版本tensorflow没有实现maxout函数的缺陷,先把cifar文件中relu层名称和类型更换为maxout的名称和类型。再把在tensorflow源代码\src\cifar-tensorflow\layers目录下的relu_layer.py重新命名为maxout_layer.py,并把文件里面的内容做出相应的修改。
3.深层卷积神经网络的训练及测试算法
深层卷积神经网络的训练流程有前向与反向传播两个步骤。全连接层卷积神经网络有别于传统的卷积神经网络是它利用逐层训练的方法。
训练阶段的算法流程图如下:
输入:训练集
误差阈值
最大迭代次数num
输出:网络权重
步骤:
初始化w,b
step1begin
step2从训练集中随机选取一个批次(batch),输入到网路模型中。
step3训练前向传播,进行conv卷积计算:
step4进行特征提取运算;
step5直到输入到全连接层
step6全链接层提取特征,输入到softmaax函数进行分类,选取概率最大的作为分类结果;
step7计算误差,进行误差反向传播
step8网络参数更新;
step9直到所有的batch都训练完毕;
step10保存模型参数(save())
其测试阶段的算法流程如下:
输入:测试集
输出:分类结果
步骤:
初始化:网络权重:w,b,训练好的网络值
step1begin
step2进行特征提取运算;
step3直到输入到全连接层
step4全链接层提取特征,输入到softmax函数进行分类,选取概率最大的作为分类结果;
step5判断比较标签与分类结果,并统计分类结果;
step6直到所有的batch全部测试完毕;
step7求所有结果的均值。
4.实验以及优化网络参数
如果遇到训练样本数量较少、神经网络的模型还复杂的情况,在训练网络时可能会出现过拟合现象。此时网络过度拟合训练集,却对训练集以外的数据不能很好地拟合。表现为随着训练迭代次数的不断增多,分类网络在训练集上的测试分类错误逐渐减小,然而测试集上的测试分类错误逐渐增大。
实际深度网络的过拟合的现象都普遍存在。所以研究减轻训练网络时出现过拟合现象十分必要,也是提高调试网络性能非常重要的步骤。
4.1数据集扩增
在大数据时代的今天,有的时候并不是说有了好的学习算法就能训练出好的神经网络模型,更多的时候还是因为更多的海量数据,特别是在深度学习方法中,为了训练出更好的网络模型,就需要充足的训练数据并采用更深层的网络。于是,获得更多的数据就显得尤为重要了,但是,如果人为的收集更多的数据就意味着需要耗费更多的人力和物力。从人工标注就可以看出这个工作的效率是极其低下的。
对于扩充数据集,既简单又有效的方法就是对原始数据进行扩充,通过对原始数据进行改动,可以得到更多的数据。对于图片数据而言,扩充其数据最简单的方法就是调整图片的角度,本论文为扩充数据集所做的工作就是将图片镜像顺时针旋转30度,用实验来说明训练数据集的数量对图像分类网络性能的影响。从实验过程中可以得到,模型的分类准确率在cifar-10和cifar-100中分别上升了0.15%和0.35%,说明数据集扩增能够改善深层卷积神经网络。
4.2设定batch值
一般通常依据损失函数的下限值或者最大的迭代次数来决定在何时对网络进行停止训练。在传统的网络训练中,采用随机顺序把每次迭代后的训练样本分为若干大小一样的小数据集,再按顺序输入网络开始训练,当所有的小数据集都训练完毕,开始下一个轮回的迭代。但本文采取不同的batch小数据集进行训练。在经理多次实验后得到batch的范围,如表2所示。
表2采取不同batch值时图像分类网络性能对比
当batch的值不同,卷积神经网络的测试错误率被列在表1中。可以看出当batch值从100增加到300时,错误率大幅度下降.任何在从300增加到400时候下降幅度降低了,几乎没有变化。从表中可以看出值越小,损失函数波动的范围就越大,同时卷积神经网络损失函数收敛的下降速度会越来越快,但网络的分类错误会升高,则证明网络没有全面优化。
训练样本若采用的采样方式有两个优势一是将多个训练样本结合成一个小数据集再进行训练,可以有效地抑制训练样本的噪声。二是可以充分利用计算机的资源,在现在所具有的gpu高性能处理速度下,批处理的训练速度可以远大于串行处理速度,进而提升了训练网络的效率。但值得注意的是,batch值有一个上界,随着值的增大,训练样本的噪声抑制能力并不会再提高,此时还会导致占用计算机更多的内存空间,训练网络的效率不升反降。