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)预测的概率分布与实际概率分布的差异的一种方式。它刻画的是实际输出(概率)与期望输出(概率)的距离,即交叉熵损失的值越小,两个概率分布就越接近。与平方损失相比,它能更有效地促进训练全连接神经网络。若

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

  1. 【金融】【pytorch】使用深度学习预测期货收盘价涨跌——全连接神经网络模型构建与训练

    [金融][pytorch]使用深度学习预测期货收盘价涨跌--全连接神经网络模型构建与训练 模型构建与训练 模型构建与训练 def get_accuracy(SR,GT,threshold=0.5):S ...

  2. python手写数字识别实验报告_Python代码实现简单的MNIST手写数字识别(适合初学者看)...

    补充:由于很多同学找我要原数据集和代码,所以我上传到了资源里,https://download..net/download/zugexiaodui/10913834 初学机器学习,第一步是做一个简单的 ...

  3. 卷积神经网络mnist手写数字识别代码_搭建经典LeNet5 CNN卷积神经网络对Mnist手写数字数据识别实例与注释讲解,准确率达到97%...

    LeNet-5卷积神经网络是最经典的卷积网络之一,这篇文章就在LeNet-5的基础上加入了一些tensorflow的有趣函数,对LeNet-5做了改动,也是对一些tf函数的实例化笔记吧. 环境 Pyc ...

  4. 简单python代码实现三层神经网络识别手写数字

    准备 这个过程非常简单,就是用到了很多的矩阵运算. 训练数据集下载地址, 测试数据集下载地址, 数据格式 .csv格式数据的每一行都是一个28*28像素的手写数字图片,每一行的第一个像素是数字的值,从 ...

  5. 《Pytorch - BP全连接神经网络模型》

    2020年10月4号,国内已经5号凌晨了,依然在家学习. 今天是我写的第三个 Pytorch程序,从今天起也算是入门了. 这一次我想把之前自己手写的matlab实现的简易的传统的BP神经网络在Pyto ...

  6. 全连接神经网络实现MNIST手写数字识别

    在对全连接神经网络的基本知识(全连接神经网络详解)学习之后,通过MNIST手写数字识别这个小项目来学习如何实现全连接神经网络. MNIST数据集 对于深度学习的任何项目来说,数据集是其中最为关键的部分 ...

  7. PaddlePaddle入门|百度零基础实践深度学习课程笔记——使用Python语言和Numpy库来构建神经网络模型

    前面的课程已经讲解了Python的一些基础操作和使用Notebook实现编程的基础知识,下面通过用Python语言和Numpy库来构建神经网络模型来初步实践. 波士顿房价预测任务 问题描述 波士顿房价 ...

  8. C语言底层搭建CNN实现MNIST手写数字识别

    手写数字识别 手写数字识别是指使用计算机自动识别手写体阿拉伯数字的技术.作为光学字符识别OCR的一个分支,它可以被广泛应用到手写数据的自动录入场景中.传统的识别方法如最近邻算法k-NN.支持向量机SV ...

  9. 1、基于Keras、Mnist手写数字识别数据集构建全连接(FC)神经网络训练模型

    文章目录 前言 一.MNIST数据集是什么? 二.构建神经网络训练模型 1.导入库 2.载入数据 3.数据处理 4.创建模型 5.编译模型 6.训练模型 7.评估模型 三.总代码 前言 提示: 1.本 ...

最新文章

  1. java中调用python
  2. 批处理中百分号%的作用
  3. JSONP跨域请求数据报错 “Unexpected token :”的解决办法
  4. [css] 用css实现倒影的效果
  5. TCP的定时器系列 — SYNACK定时器
  6. python list去重时间复杂度_List集合去重的一种方法 z
  7. Spring MVC__自定义日期类型转换器
  8. 【报告分享】2020上半年短视频内容发展盘点.pdf(附下载链接)
  9. JavaScript 的这个难点,毁掉了多少程序员?
  10. 【react】 react 中 前后端数据的交互方式 (原生的ajax、jq的ajax、axios、fetch )...
  11. 计算机外文文献PDF,computer network 计算机 网络 外文文献.pdf
  12. 网站管理后台帐号密码找回方法
  13. 内外网隔离--网络准入控制系统有什么功能
  14. 瞎扯数学分析:微积分
  15. 微信电子健康卡开放平台接口对接
  16. ps制作台式计算机图标,ps制作计算机图标
  17. 悠漓带你玩转C语言(函数)
  18. C++ inheritance examples
  19. java我的世界溺尸为啥这么少,我的世界:溺尸刷新几率存在问题?溺尸刷怪塔为何得不到三叉戟?...
  20. 面试十五年经验程序员,面试官沦为听众

热门文章

  1. mysql将时间戳转换为年月日格式进行查询
  2. 如何让孩子保持兴趣,怎么培养孩子读书的兴趣
  3. c语言字符三维数组定义时赋值,c语言中三维数组的赋值顺序?
  4. STM32开发板搭建开发环境之安装篇
  5. Iphone手机企业邮箱设置 九步轻松搞定
  6. 计算机工程与科学是sci,系统科学与系统工程有哪些sci期刊
  7. C++快慢指针理解与应用
  8. CPython、Jython、PyPy
  9. Pycharm中对代码进行注释和缩进
  10. Anbox之构建android.img(三)