matlab
更新时间:2022-09-28 23:53:06 阅读: 评论:0
卷积神经网络代码理解
1、代码来源:
代码来自DeepLearnToolbox-master,是matlab一个深度学****的工具包,里面含有很多机器学****算法,如卷积神经网络CNN,深度信念网络DBN,自动编码AutoEncoder等。
2、CNN函数介绍
函数名称
功能
example.m
使用样例,设置网络结构及训练参数(卷积,下采样层数;卷积核大小,下采样降幅,学****率,迭代次数等)
cnntup.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计算误差和LossFunction
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随机初始化卷积核权重,
代码为: