仅用Numpy实现CNN卷积神经网络的推导和训练(1)
仅用Numpy实现CNN卷积神经网络的推导和训练(1)

仅用Numpy实现CNN卷积神经网络的推导和训练(1)


作者:Harkerbest

声明:本文章为原创文章,本文章永久链接:https://www.harkerbest.cn/p/848,转载请注明原文地址,盗版必究!!!


  优秀的深度学习教程很多,但大都在讲解神经网络的数学模型和训练和推理原理之后直接用Pytorch或者TensorFLow等框架实现具体过程。实现神经网络的正向推理和反向传播求导训练是个非常有意思的事情,从零开始构建神经网络是体验这个奇妙的过程的不错选项。

  这个系列的文章将只用Python的numpy库,开始构建卷积神经网络并实现正向推理和误差反向传播学习。

前言

  笔者第一次真正接触深度学习是在高二的时候,之所以说是“真正”,是因为在高二之前也尝试了好几次,最早是在初三,奈何受限于数学的门槛以失败告终。那时候在学校没有网络和电脑,只能在学校看所谓的“闲书”,一开始尝试看了些TensorFlow、Pytorch之类的教程,但是发现书上讲到机器学习的内容只是大段地列举公式,显然不可能被一个尝试自学的中学生学会。

  后来,在图灵社区上看到一本评分极高的深度学习入门书籍,日本斋藤康毅的《Deep Learning from Scratch》(后来我才知道这就是深度学习领域相当出名的“鱼书”),我就决定再尝试一次。图灵社区给我的感觉还是相当不错的(现在就不好说了),因为当年初中的时候我第一门掌握的编程语言Python读的就是图灵社区的另一本书《零压力学Python》(Python Without Fear)。十分庆幸,这次我终于成功了,它真的把我带进了这个我之前十分向往却求之不得的伟大领域,尽管深度学习只是整个AI的一部分,但已经让我对它的认识产生了质的飞跃。

  现在回想起来,主要还是因为鱼书仔细讲解了每一个公式的来源与意义,并且简单神经网络的实现除了矩阵乘法外并没有其他超出高中数学的内容,而且书中仔细讲解了矩阵乘法、导数、偏导数。而且,作者最可贵的地方莫过于它仅仅使用了Numpy提供基础数学运算外并无再用其他工具实现了整个卷积神经网络的正向推理和误差反向传播法学习,这是个非常美妙的体验,对整个深度学习的理解也是至关重要的。

  如今过去了许多年了,我想,或许可以靠着当年的记忆,抛开PyTorch,重新实现这个过程,用简单的神经网络识别MNIST手写数据集,品味这其中的乐趣。

目录

下面是内容的安排,已经完成的部分会链接到相应的文章。

  • 激活函数的实现
  • 简单全连接层的实现
  • 全连接层的正向推理
  • 损失函数的实现(交叉熵误差和均方误差)
  • 偏导数和梯度下降法实现
  • 全连接层类的构建
  • 实现简单的学习
  • 计算图的实现
  • 乘法、加法层的实现
  • 激活函数层的实现
  • Softmax/Affine层的实现
  • 全连接层误差反向传播法实现
  • 卷积层的实现
  • 池化层的实现
  • 卷积神经网络的最终实现

嗯,也不知道最终是否能够完成全部15篇文章,但无论如何,加油吧!

如果你打开这篇文章的时候我还没有写完全篇,可以在评论区踹一脚【doge】

2条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

CAPTCHAis initialing...