当前位置:   article > 正文

全站最详细的Python numpy 搭建全连接神经网络模型教程(理论计算+代码实现)(不止能预测手写数字数据,准确率93.21%)

全连接神经网络

1.引言

本文构建的全连接神经网络模型结构图如上。其中中间隐藏层的数量以及各层(输入层、隐藏层、输出层)的神经单元数量均可 自由设置,本文构造的神经网络并不是专门为识别手写数字而写死的,而是可以根据 任务的需要,自由改变神经网络的参数(如层数、神经单元数、学习率、学习率衰减值 等)。在本文里以识别手写数字为例,输出层的神经单元数为 9,结构图为了能够表示得更清晰(使其看 起来不混乱),遂只绘制了 3 个神经单元。

本文已将神经网络模型程序封装成类,神经网络的各参数为类中属性,神经网络的生成、训练、预测、保存、评估等为类中方法,以便可以更加快捷地调用,同时降低代码冗余、提高代码可读性。

本文作者:A WHU SIM Student

目录

1.引言

2.涉及的神经网络知识原理

2.1神经网络思想

2.2激活函数

2.2.1sigmoid激活函数

2.2.2softmax激活函数

2.3交叉熵损失

2.4小批量梯度下降法

2.5误差反向传播法

2.6手写数字数据集

2.7Python面向对象编程

3.详细计算推导

3.1各符号解释

3.2前向传播部分

3.3小批量梯度下降部分

3.4误差反向传播部分

4.代码实现

4.1本文神经网络UML类图如下: ​

4.2用到的第三方库有:

4.3模型包含的属性与方法部分代码如下:

4.4模型功能:

4.5模型训练与预测中的部分截图:​

4.6包含6万条手写数据的数据集+本文章构建的全连接神经网络模型+训练好的准确率为93.21%的全连接神经网络模型:全连接神经网络


2.涉及的神经网络知识原理

2.1神经网络思想

人工神经网络(artificial neural network,ANN)是一种模仿生物神经网络的结构和功能的数学模型或计算模型。神经网络由大量的人工神经元联结进行计算。大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统。现代神经网络是一种非线性统计性数据建模工具,常用来对输入和输出间复杂的关系进行建模,或用来探索数据的模式。

生物神经网络的主要工作原理如下:

①神经元形成网络。

②对于从其他多个神经元传递过来的信号,如果它们的和不超过某个固定大小的值(阈值),则神经元不做出任何反应。

③对于从其他多个神经元传递过来的信号,如果它们的和超过某个固定大小的值(阈值),则神经元做出反应(称为点火),向另外的神经元传递固定强度的信号。

④在②和③中,从多个神经元传递过来的信号之和中,每个信号对应的权重不一样。

 

将神经元的工作在数学上抽象化,并以其为单位人工地形成网络,这样的人工网络就是神经网络。将构成大脑的神经元的集合体抽象为数学模型,这就是神经网络的出发点。

单个人工神经单元结构如下图:

 多个神经单元组成的神经网络如下图:

 

2.2激活函数

激活函数对于ANN学习和理解真正复杂的东西很重要。它们的主要目的是将ANN中节点的输入信号转换为输出信号,此输出信号将作为下一层的输入。常用激活函数有:单位阶跃激活函数、Sigmoid激活函数、tanh双曲正切激活函数、ReLU整流线性单元激活函数、softmax激活函数。本文使用的是sigmoid(中间层使用)和softmax激活函数(输出层使用)。

2.2.1sigmoid激活函数

Sigmoid函数是一个有着优美S形曲线的数学函数,在逻辑回归、人工神经网络中有着广泛的应用。

公式:

 导数:

 图像:

 

优点:平滑、易于求导。

缺点:激活函数计算量大(在正向传播和反向传播中都包含幂运算和除法);Sigmoid导数取值范围是[0, 0.25],由于神经网络反向传播时的“链式反应”,很容易就会出现梯度消失的情况。例如对于一个10层的网络, 根据 0.25^10 ≈ 0.000000954,第10层的误差相对第一层卷积的参数 W1 的梯度将是一个非常小的值,这就是所谓的“梯度消失”;Sigmoid的输出不是0均值(即zero-centered);这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会改变数据的原始分布。

2.2.2softmax激活函数

softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类,其多用于神经网络的最后一次层。

公式:

 

导数:

对 softmax 导数,就是求第 i 项的输出对第 j 项输入的偏导:

当i=j时:

 

当i != j时:

优点:softmax 是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为 K 的任意实向量,softmax 可以将其压缩为长度为 K,值在(0,1)范围内,并且向量中元素的总和为 1 的实向量。

缺点:在零点不可微,负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。

2.3交叉熵损失

交叉熵是信息论中的概念,最初用于估算平均编码长度。给定两个概率分布p和q,通过q来表示p的交叉熵为:

 交叉熵损失(Cross-entropy cost)是用来衡量深度神经网络(DNN)预测的概率分布与实际概率分布的差异的一种方式。它刻画的是实际输出(概率)与期望输出(概率)的距离,即交叉熵损失的值越小,两个概率分布就越接近。与平方损失相比,它能更有效地促进训练全连接神经网络。若

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/306154
推荐阅读
相关标签