用标准3层神经网络实现MNIST识别

一.MINIST数据集下载

1.https://pjreddie.com/projects/mnist-in-csv/      此网站提供了mnist_train.csv和mnist_test.csv,其中mnist_train.csv有60000个训练数据,mnist_test.csv有10000个测试数据

2.还有两个较小数据集,可供测试。

https://raw.githubusercontent.com/makeyourownneuralnetwork/makeyourownneuralnetwork/master/mnist_dataset/mnist_train_100.csv

https://raw.githubusercontent.com/makeyourownneuralnetwork/makeyourownneuralnetwork/master/mnist_dataset/mnist_test_10.csv

二.如上下载MNIST数据集,那么MNIST数据集到底是什么呢?是0~9的数字图像的集合,在MNIST数据集中数字图像用784个像素值表示,同一个数字图像有不同的像素值。下面我们可以看下MNIST数据集长什么样子。

1.我们可以用python的open函数加载mnist_train_100.csv数据集,取第一个集合,代码如下,非常简单:

2.如下为输出的集合内容,他们是由785个数字组成,第一个数字为标签,即书写者实际希望表示的数字。后面的784个数字为书写体数字的像素值,范围在0~255之间,像素数组的尺寸为28*28.

3.从这个长达784个值的列表中,人们很难看出这些数字组成了某人书写数字5的图像。我们可以利用上面的数据画出图像,看下到底是不是5?

还是利用python代码实现:

如上,我们把上面的字符串按照","分割,转换成28*28的数组,绘制成图像,那么会是5吗,下面可以看下执行的记结果:

确实很像5,下面MNIST基础已经讲解完全,下面我们进行用标准3层神经网络实现MNIST识别。

三.用标准3层神经网络实现MNIST识别

在做一件事之前我们要先明白我们的目的是什么?一个图片,我们用眼睛可以很直观的看出是什么,比如是花、人等。但是计算机没有眼睛,我们想让它识别图片怎么办呢,这就是我们的目的。我们的目的是让神经网络能识别数字图像。搭建3层神经网络,用MNIST训练数据集训练神经网络,训练完后我们用测试训练集来测试当我们输入一个数字图像的784个像素值时,神经网络到底能不能根据这些像素值来识别出数字图像是几。

1.准备MNIST训练数据。

1.>搭建3层标准神经网络,可以参考我以前的博客。https://www.cnblogs.com/bestExpert/p/9248353.html

2.>搭建完后需要确认3层的节点数目,上面我们说了数字图像是由784个像素值组成,所以输入层需要784个节点。隐藏层节点需要多少个并没有一个明确的规定,我们可以先尝试选择100个节点。输出层我们的目的是确认数字图像是几,所以输出层需要10个节点,对应数字图像0~9。综上我们得出,输入层784个节点,隐藏层100个节点,输出层10个节点。

3.>确定输入值,输入值最佳的范围为0.01~0.99,但是数字图片的像素值在0~255之间,所以我们需要缩小像素值,使其能达到0.01~0.99的范围。如下,用python实现输入值:

4.>最后一步是确定目标值,上面我们已经说了输出层为10个节点,代表0~9,输出层数据的范围为0.01~0.99,我们可以假设一下,当输入层的像素值代表5的数字时,输出层第6个节点的输出信号应该最大,其他输出信号应该很小,处于抑制状态,这就是我们希望达到的状态,由此我们可以确定目标值应该是第6个节点输出值最大为0.99,其他输出值数据很小,为0.01,这就是我们希望达到的目标值。用python实现如下:

5.>根据mnist_train_100.csv训练数据集来训练神经网络。优化权重。

targets为目标值数组,其中output_nodes为输出层节点数,为10,第一行代码创建一个长度为10的数组,初始值为0.01,第二行代码根据像素值的标签来设置数组中那个值为0.99。、

以上步骤为第一阶段,搭建神经网络,确认3层节点,确定输入值、输出值,训练神经网络。上述综合代码比较多,需要的小伙伴可以在github上面下载,地址为:

2.测试网络。

原文地址:https://www.cnblogs.com/bestExpert/p/9291185.html

时间: 2024-10-29 07:21:24

用标准3层神经网络实现MNIST识别的相关文章

Deep Learning学习 之 卷积神经网络(文字识别系统LeNet-5)

部分预备知识可以先看博文,统一了一些专业名词. 原文摘自,在此文中对原文增加了一些注释和修改,统一了与之前博文的专业名词说法,有助于理解. !!!如果读者发现一些数学符号后面有一些奇怪的竖线,那是CSDN的Latex除了问题,大家自行过滤. 在经典的模式识别中,一般是事先提取特征.提取诸多特征后,要对这些特征进行相关性分析,找到最能代表字符的特征,去掉对分类无关和自相关的特征.然而,这些特征的提取太过依赖人的经验和主观意识,提取到的特征的不同对分类性能影响很大,甚至提取的特征的顺序也会影响最后的

ECG信号读取,检测QRS,P,T 波(基于小波去噪与检测),基于BP神经网络的身份识别

这学期选了神经网络的课程,最后作业是处理ECG信号,并利用神经网络进行识别. 1  ECG介绍与读取ECG信号 1)ECG介绍  具体ECG背景应用就不介绍了,大家可以参考百度 谷歌.只是简单说下ECG的结构: 一个完整周期的ECG信号有 QRS P T 波组成,不同的人对应不用的波形,同一个人在不同的阶段波形也不同.我们需要根据各个波形的特点,提取出相应的特征,对不同的人进行身份识别. 2)ECG信号读取 首先需要到MIT-BIH数据库中下载ECG信号,具体的下载地址与程序读取内容介绍可以参考

deep_learning_LSTM长短期记忆神经网络处理Mnist数据集

1.RNN(Recurrent Neural Network)循环神经网络模型 详见RNN循环神经网络:https://www.cnblogs.com/pinard/p/6509630.html 2.LSTM(Long Short Term Memory)长短期记忆神经网络模型 详见LSTM长短期记忆神经网络:http://www.cnblogs.com/pinard/p/6519110.html 3.LSTM长短期记忆神经网络处理Mnist数据集 1 2 3 4 5 6 7 8 9 10 11

ATM的标准和层

ATM的标准和层 有很多文件与ATM有关,其中大部分由ITU-T.ANSI和ATM论坛颁布.ATM标准的开发始自1984年,ITU-T和ATM论坛于1993年完成了许多标准,ATM论坛还颁布了B-ISDN交换运营商接口,用于美国LATA(本地访问与传输区域)间的操作.在分层结构上,ATM类似于其他新兴通信技术(如城域网[MAN]和交换多兆位数据业务[SMDS]).ATM适配层(AAL)为面向连接和无连接的可变比特率(VBR)应用提供会聚功能.ATM以恒定比特率(CBR)方式支持同步应用(语音.视

python实现单隐层神经网络基本模型

应朋友之请写了一份python实现单隐层BP Ann model的code,好久没写博客,就顺便发上来.这篇代码比较干净利落,比较纯粹的描述了Ann的基本原理,初学机器学习的同学可以参考. 模型中几个比较重要的参数: 1.学习率 学习率是影响模型收敛的重要因素,一般来说要根据具体场景灵活调整,过高的学习率会使得函数快速发散. 2.隐元数量 一般来说,增加隐层中神经元的数量比直接增加隐层更加有效,这也是单隐层神经网络的特点.对于复杂程度不算太高的问题而言,单隐层的效果优于多隐层. 3.随机种子位数

Pytorch入门实战一:LeNet神经网络实现 MNIST手写数字识别

记得第一次接触手写数字识别数据集还在学习TensorFlow,各种sess.run(),头都绕晕了.自从接触pytorch以来,一直想写点什么.曾经在2017年5月,Andrej Karpathy发表的一片Twitter,调侃道:l've been using PyTorch a few months now, l've never felt better, l've more energy.My skin is clearer. My eye sight has improved.确实,使用p

使用opencv的SVM和神经网络实现车牌识别

一.前言 本文参考自<深入理解Opencv 实用计算机视觉项目解析>中的自动车牌识别项目,并对其中的方法理解后,再进行实践.深刻认识到实际上要完成车牌区域准确定位.车牌区域中字符的准确分割,字符准确识别这一系列步骤的困难.所以最后的识别效果也是有待进一步提高. 二.程序流程 程序流程如下所示: 相应的main函数如下 #include "carID_Detection.h" int main() { Mat img_input = imread("testCarI

可变多隐层神经网络的python实现

说明:这是我对网上代码的改写版本(基于win7 + python34) 一.先说说改动的部分 1) 改写了NetStruct类初始化函数 原来: 1 class NetStruct: 2 '''神经网络结构''' 3 def __init__(self, x, y, hidden_layers, activ_fun_list, performance_function = 'mse'): 现在: 1 class NetStruct: 2 '''神经网络结构''' 3 def __init__(s

基于SVM与人工神经网络的车牌识别系统

最近研究了支持向量机(Support Vector Machine,SVM)和人工神经网络(Artifical Neural Network,ANN)等模式识别理论,结合OpenCV的书:<Mastering OpenCV with Practical Computer Vision Projects>,将两种思想运用到车辆的车牌识别算法中.车辆识别结合了多种图像处理技术,如视频监控.图像检测.图像分割和光学字符识别(OCR)等,在道路交通监控中有着重要的作用.以下内容主要包含几个方面: 车牌