文档库 最新最全的文档下载
当前位置:文档库 › matlab_CNN代码理解

matlab_CNN代码理解

matlab_CNN代码理解
matlab_CNN代码理解

卷积神经网络代码理解

1、代码来源:

代码来自DeepLearnToolbox-master,是matlab一个深度学习的工具包,里面含有很多机器学习算法,如卷积神经网络CNN,深度信念网络DBN,自动编码AutoEncoder等。

2、CNN函数介绍

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计算误差和Loss Function

7.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初始化卷积层偏置,均设为0

8.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 计算输出误差

误差=输出-期望

=—

相关文档