您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > matlab_CNN代码理解
卷积神经网络代码理解1、代码来源:代码来自DeepLearnToolbox-master,是matlab一个深度学习的工具包,里面含有很多机器学习算法,如卷积神经网络CNN,深度信念网络DBN,自动编码AutoEncoder等。2、CNN函数介绍函数名称功能example.m使用样例,设置网络结构及训练参数(卷积,下采样层数;卷积核大小,下采样降幅,学习率,迭代次数等)cnnsetup.m构建网络结构,并初始化网络中各参数,包括各层特征图大小,卷积核权重cnntrain.m训练网络cnnff.m训练网络—向前传播过程(卷积、下采样、全连接、输出等)cnnbp.m训练网络—误差反向传播过程cnnapplygrads.m权重修改,更新模型cnntest.m验证测试样本的准确率3、函数调用关系图3-1函数调用关系图4、样例数据集该模型使用了mnist的数字mnist_uint8.mat作为样本,每个样本特征为一个28*28的向量。其中训练集样本60000,测试集样本10000,并将首先将样本像元值转化为一维向量作为网络的输入:样本示例如下图所示:图4-1样本示例图图4-2样本预处理5、样例网络结构图5-1网络结构图6、算法流程图6-1算法流程7、误差反向传播过程7.1计算误差和LossFunction7.2计算单层感知机的灵敏度7.3把单层感知机的输入层的误差矩阵,恢复为4*4二维矩阵形式7.4误差在特征提取网络【卷积降采样层】的传播7.4.1卷积层敏感度向前传播假设拿出第l层某个特征图图,大小为3×3,第l+1层核大小为2×2卷积核为:灵敏度为:采用’full’模式需先将第l+1层2个卷积图扩充,周围填0,I层灵敏度7.4.2采样层灵敏度向前传播假设卷积层的矩形大小为4×4,pooling区域大小为2×2,则pooling后得到的矩形大小也为2*2,如果此时pooling后的矩形误差敏感值如下:则按照mean-pooling,首先得到的卷积层应该是4×4大小,其值分布为(等值复制):因为得满足反向传播时各层间误差敏感总和不变,所以卷积层对应每个值需要平摊(除以pooling区域大小,这里pooling层大小为2×2=4)),最后的卷积层值分布为:7.5计算卷积层和单层感知机的梯度7.6权重及偏置修改,更新模型8、示例(训练一个样本)8.1初始化网络8.1.1初始化网络结构,代码如下:其结构如下图所示,从左到右依次命名为:输入层、卷积层1、降采样层1、卷积层2、降采样层2、全连接层、输出层(命名方便后面阐述)8.1.2随机初始化卷积核权重,代码为:疑问:rand(n)是产生n×n的0-1之间均匀取值的数值的矩阵,再减去0.5就相当于产生-0.5到0.5之间的随机数,再*2就放大到[-1,1]。然后不明白再乘以后面那一数?8.1.2.1卷积层1有1*6=6个卷积核卷积层1第一个卷积核权重为:卷积层1第二个卷积核权重为:卷积层1第三个卷积核权重为:卷积层1第四个卷积核权重为:卷积层1第五个卷积核权重为:卷积层1第六个卷积核权重为:其存储在格式为(方便理解卷积运算):8.1.2.2卷积层2有6*12=72个卷积核,其权重不在这里一一列出,其存储格式为8.1.3初始化卷积层偏置,均设为08.1.4随机初始化全连接层权重构造一个10*192的矩阵全连接层有10*192个权重,下图截取部分值:8.2信号向前传播8.2.1输入训练样本为(28*28)(截取部分值),及期望输出为(10*1)8.2.2第一次卷积过程第一次卷积,获取6张24*24的特征图获取第一个特征图(24*24)(截取部分值):第一个卷积核与输入的特征图进行卷积得到第一个特征图获取第二个特征图(24*24):以此类推,直至第六张特征图,即得到卷积层1:8.2.3第一次降采样过程(采用均值采样法,模板为2*2,模板上值为0.25,得到6个12*12的特征图)第一张降采样后特征图(其他不再列举)采样过程分为两步:(1)采样模板与上层特征图进行卷积,得到6张23*23的特征图,该过程与8.2.2类似(2)将上一步得到的每张23*23的图隔行隔列取值,即得到降采样最终的图为12*12,举例说明隔行隔列取值方式:8.2.4第二次卷积第二次卷积时,输入6张特征图,与72个卷积核进行卷积,得到12张8*8特征图,每张特征图要与6个卷积核进行卷积,卷积过程如下:(1)上层输出的6张特征图与第一列的6个卷积核分别进行卷积运算,得到6张图,然后这6张图对应位置值相加(矩阵相加),即得到第一张8*8特征图;(2)上层输出的6张特征图与第二列的6个卷积核分别进行卷积运算,同样得到6张图,然后这6张图对应位置相加,即得到第二张8*8特征图;以此类推,最终得到12张8*8的特征图8.2.5第二次降采样第二次降采样过程与第一次完全相同,在此不再赘述,本次降采样,得到12张4*4的特征图8.2.6构建全连接层即将12个4*4的矩阵,构建成1*192的一维向量(每次在fv后面追加一个长度为4*4=16的向量):全连接层特征图值(截取部分值)8.2.7输出结果输出结果为10*1的矩阵8.3误差反向传播8.3.1计算输出误差误差=输出-期望=—8.3.2计算输出层灵敏度即残差=*(*(-))8.3.3计算全连接层残差全连接层残差等于全连接层权重与输出层残差的点乘,结果为192*1的矩阵8.3.4计算降采样层2的残差采样层2的残差即将一维形式的全连接层残差转化为12*4*4的矩阵即可:每次向后截取fvd中16个值重构成4*4矩阵,共12个4*4的矩阵截取部分8.3.5计算卷积层2的残差从卷积层2到降采样层2时进行了降采样的操作,因此从降采样层2的残差推算卷积层2的残差时,首先对降采样层2的残差进行上采样,expand函数即实现了上采样的过程,即将4*4的降采样层2的残差扩充为8*8的矩阵,8*8的矩阵中的值为4*4矩阵中的值先等值复制4份再除以4(保证残差和相等),举例说明:通过上述过程,得到扩充后的残差,并按照代码中的公式,即卷积层2的特征图*(1-特征图)*扩充后的残差即得到卷积层2的残差,为12*8*8的矩阵,以下截取部分示例:8.3.6计算降采样层1的残差从降采样层1到卷积层2经过了卷积的过程,不仅特征图的大小有所改变,数量也从6个变为12个,因此从卷积层2推导降采样层1的残差,要经过反卷积的过程,即在full模式下进行卷积,并将卷积核左右上下旋转180,full模式举例说明为(假设卷积层2卷积核为a*a),卷积层2层为2*2(b*b),则full模式扩充后为4*4(b+2(a-1)):进行full模式后,再与卷积层2卷积核权重(旋转180度)点乘,是怎么从12张图变为6张图的呢?与8.2.4节过程相反,将卷积层2full模式后的12个残差矩阵与旋转后的72个卷积核点乘,点乘方式如下所示:(1)12个特征矩阵与卷积模板中第一行的12个卷积核分别点乘,得到12个矩阵,相应位置相加即得到第一个将采样层1的残差矩阵(2)12个特征矩阵与卷积模板中第二行的12个卷积核分别点乘,得到12个矩阵,相应位置相加即得到第二个将采样层1的残差矩阵以此类推,得到降采样层1的残差矩阵,为6*12*12以下截取部分:8.3.7计算卷积层1残差计算方法与8.3.5节计算卷积层2的残差完全相同,不再赘述8.3.8计算卷积层1、卷积层2权重及偏置梯度权重梯度计算公式即为将上层特征图进行旋转并与该层残差进行点乘再除以每次训练的样本个数:偏置梯度为该层残差求和除以训练样本个数:截取部分结果:8.3.9计算全连接层权重及偏置梯度权重梯度为残差与特征图的点乘再除以一次性训练样本数偏置梯度为残差求和的平均值截取部分结果:8.3.10更新卷积层及全连接层权重、偏置卷积层及全连接层权重、偏置均等于原来值减去学习率乘以相应的梯度截取部分结果:8.4分类8.4.1输入测试样本(28*28)截取部分,期望输出8.4.2按训练好的网络进行分类8.4.3输出分类结果错误率0
本文标题:matlab_CNN代码理解
链接地址:https://www.777doc.com/doc-4210078 .html