MATLAB从底层编写代码复现经典CNN卷积神经网络LeNet5
MATLAB从底层编写代码复现经典CNN卷积神经网络LeNet5
前向传播 反向传播
目录
前言
网上介绍用python复现卷积神经网络的文章视频很多,但这些介绍大多数都是调用神经网络相关的库函数,即使复现,也仅仅只是熟悉流程而已,压根就未搞明白误差反向传播的数学原理。本文则是在弄懂误差怎么在全连接层、池化层、卷积层反向传播后,在MATLAB软件上面自己从底层编写代码复现LeNet5,仅调用一些计算相关的函数,完全不调用任何关于神经网络相关的库函数,主打一个自己编写误差反向传播算法训练LeNet5。
提示:以下是本篇文章正文内容,转载请附上链接
一、LeNet5简介

上图是论文里面的图,论文用的是CIFAR-10数据集,所以输入是32*32的维度,复现很多人用MNIST数据集,即下面这张图,输入是28*28的维度。本文复现用的下面这张图。

LeNet5这个5的意思是指该网络包含2个卷积层,3个全连接层,池化层和卷积层算一层,所以是一个5层的神经网络。
二、反向传播原理
原理可参考下面的文章,推导很详细。
https://zhuanlan.zhihu.com/p/680222880
https://zhuanlan.zhihu.com/p/687501772
第一篇文章讲全连接层误差反向传播,第二篇文章和第三篇文章讲卷积层误差反向传播。
三、复现结果
复现时参数设置如下:

第2层卷积神经网络卷积核设置的12个,相比于论文,少了4个,这是因为论文第一层的6个到第二层的16个有明确的对应关系,实现起来较为复杂,本文复现相当于第一层经过6个卷积核后得到6张特征图,每张特征图分别对应第二层的2个卷积核,这样对应关系实现起来就简单了。这样处理不影响学习反向传播算法。复现用的MNIST数据集。
编写代码如下:

6个函数和一个主函数。forward_convolution1是前向传播第一层卷积,forward_convolution2是前向传播第二层卷积,mean_pool是平均池化,ReLU是激活函数,backward_convlution2是第二层卷积误差反向传播,CNN是整个网络的前向和反向传播,其余四个函数在CNN中被调用,CNN在主函数test_CNN中被调用。
复现结果如下:


从结果看还没有收敛,继续训练准确率还会提高。
四、源代码
总结
以上就是全部内容,复现结果说明了复现LeNet5成功。
更多推荐
所有评论(0)