MATLAB从底层编写代码复现经典CNN卷积神经网络LeNet5

前向传播 反向传播

目录

前言

一、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

CNN的反向传播 | Jermmy's Lazy Blog

第一篇文章讲全连接层误差反向传播,第二篇文章和第三篇文章讲卷积层误差反向传播。

三、复现结果

        复现时参数设置如下:

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

编写代码如下:

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

        复现结果如下:

        从结果看还没有收敛,继续训练准确率还会提高。

四、源代码

https://download.csdn.net/download/m0_66360845/90237178icon-default.png?t=O83Ahttps://download.csdn.net/download/m0_66360845/90237178


总结

        以上就是全部内容,复现结果说明了复现LeNet5成功。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐