python实现神经网络数字识别_PYTHON搭建BP神经网络,并实现手写数字识别

基本思路:

1.定义神经网络:定义输入层→定义隐藏层→定义输出层→找到权重和偏差→设置学习率→设置激活函数

2.定义训练网络:根据训练样本给出输出→根据输出结果,计算误差,根据误差反向更新隐藏层权重

3.定义查询网络:预测新样本的种类,即通过神经网络最终的输出值。

4.定义主函数:各层数据的输入→学习率的输入→生成神经网络

5.计算查询结果的正确率:每个数字得出的输出值与正确值进行比较,得出正确率。

程序分四个部分,第一个部分数据读取,第二个部分是神经网络的配置,第三部分是神经网络的训练,第四部分是神经网络的测试

BP神经网络是一个有监督学习模型,是神经网络类算法中非常重要和典型的算法,三层神经网络的基本结构如下:

通过这个最简单的bp神经网络,其实它的运行机理就是:一个特征向量的各个分量按不同权重加权,再加一个常数项偏置,生成隐藏层各节点的值。隐藏层节点的值经过一个激活函数激活后,获得隐藏层激活值,隐藏层激活值仿照输入层到隐藏层的过程,加权再加偏置,获得输出层值,通过一个激活函数得到最后的输出。

激活函数可使用值域为(0,1)的sigmoid函数,也可使用值域为(-1,1)的tanh函数,两个函数的求导都较为方便。

假设我们试图确定手写图像是否描绘为“9”。 设计网络的一种自然方式是将图像像素的强度编码到输入神经元中。如果图像是64×64灰度图像,那么我们将有4,096 = 64×64 个输入神经元(像素点),强度在0和1之间适当缩放。输出层将只包含一个神经元,输出小于0.5的值表示“输入图像不是9”,大于0.5的值表示“输入图像是9”。

网络的第一层为输入层:输入层包含编码输入像素值的神经元。我们的网络训练数据将由扫描的手写数字的28×28像素图像组成,因此输入层包含784 = 28×28 个神经元。

网络的第二层为隐藏层:我们用n表示这个隐藏层中的神经元数量,我们将试验n的不同值。

网络的第三层为输出层:如果第一个神经元激活,即输出 ≈ 1,那么这将表明网络认为该数字是0。如此类推。更准确地说,我们将输出神经元从0到9编号,并找出哪个神经元来匹配数字的最大激活值。 因为输出层只有10种结果,所以为10。

现在设计好了神经网络,如果要实现数字的识别,我们需要的第一件事是要学习的数据集即训练数据集。

这里将运用MNIST数据。它包含60,000张图像用作训练数据,尺寸为28 x 28像素;10,000个图像,用作测试数据,尺寸为28 x 28像素。输入像素是灰度,值为0.0表示白色,值1.0表示黑色,在0到1之间灰度由浅变深。我们将使用测试数据来评估我们的神经网络学会识别数字的程度。

过程:

训练网络:

1.正向传播:针对训练样本给出输出,定义输入层与隐藏层之间的初始权重参数。

2.误差反向传播:针对输出,计算误差,根据误差反向更新隐藏层神经的误差,更新初始权重。

3.更新权重。

代码及解释:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值