看了《python神经网络编程》,跟着书上敲了一下mnist手写数字的代码,对神经网络有了初步的了解。

此项目为三层神经网络识别,激活函数采用sigmoid函数,数据集为mnist手写数字集,训练集包括60000个样本,测试集10000个样本。

第一部分,创建神将网络模型

import numpy
import matplotlib.pyplot
#%matplotlib inline用在Jupyter notebook中(代替plt.show()),使用%matplotlib命令可以将matplotlib的图表直接嵌入到Notebook之中
%matplotlib inline
#sigmoid函数,在这组函数中,S函数称为expit()
import scipy.special  class neuralNetwork:def __init__(self,inputnodes,hiddennodes,outputnodes,learningrate):self.inodes = inputnodes  #输入节点self.hnodes = hiddennodes #隐藏节点self.onodes = outputnodes #输出节点self.lr = learningrate    #学习率#         初始化参数self.wih=(numpy.random.rand(self.hnodes,self.inodes )-0.5)self.woh=(numpy.random.rand(self.onodes,self.hnodes)-0.5)#        激活函数为sigmoid函数,使用lambda创建函数(匿名函数),方便快捷self.activation_function = lambda x:scipy.special.expit(x)pass#     训练d代码def train(self,input_list,target_list):
#         将输入转换为numpy数组,dmin指定生成数组的最小维度inputs = numpy.array(input_list,ndmin=2).Ttargets = numpy.array(target_list,ndmin=2).T
#     计算隐藏层hidden_inputs = numpy.dot(self.wih,inputs)
#     调用sigmoid激活函数hidden_outputs = self.activation_function(hidden_inputs)
#      输出层final_inputs=numpy.dot(self.woh,hidden_outputs)final_outputs = self.activation_function(final_inputs)#         计算误差error = targets-final_outputs
#     隐藏层误差节点反向传播的误差hidden_error = numpy.dot(self.woh.T,error) #       优化权重, 正常对应元素相乘,·乘是矩阵点击
#       transpose()简单来说,就相当于数学中的转置,在矩阵中,转置就是把行与列相互调换位置;self.woh += self.lr * numpy.dot((error * final_outputs * (1.0-final_outputs)),numpy.transpose(hidden_outputs)) self.wih += self.lr * numpy.dot((hidden_error*hidden_outputs*(1.0-hidden_outputs)),numpy.transpose(inputs)) pass#     查询函数def query(self,inputs):inputs = numpy.array(inputs,ndmin=2).Thidden_inputs = numpy.dot(self.wih,inputs)hidden_outputs = self.activation_function(hidden_inputs)final_inputs=numpy.dot(self.woh,hidden_outputs)final_outputs = self.activation_function(final_inputs)return final_outputspass

第二部分 训练网络

inputnodes=28*28
hiddennodes=100
outputnodes=10
learningrate=0.1
# 创造神经网络实例
n = neuralNetwork(inputnodes,hiddennodes,outputnodes,learningrate)# 获取mnist_train数据集
training_date_file = open("mnist_train.csv","r")
training_date_list = training_date_file.readlines()
training_date_file.close()a=0
for record in training_date_list:# 用“,”分割长的字符串值,拆分为单个值all_values = record.split(',')
# 第一个值为标签,忽略, 将剩余784个值转换为28*28数组
# numpy.asfarray()将文本字符串转换为实数并创建这些数字的数组,
# 因为文件是用文本读取的,每一条记录仍然是文本,用“,”分割得到的仍然是文本
# all_values[1:]/255.0*0.99)+0.01 是将输入颜色从0-255缩小到0.01-1.00,最小值为0.01是避免先前观察到的0值输入最终会人为地造成权重更新失败inputs =( numpy.asfarray(all_values[1:])/255.0*0.99)+0.01#     将训练目标标签从字符串形式转换为整数形式,正确元素设置为0.99 标签“0”转换为整数0targets = numpy.zeros(outputnodes)+0.01targets[int(all_values[0])]=0.99n.train(inputs,targets)#     a用来计数,查看训练进度a=a+1if(a%10000==0):print(a)pass

网络训练结束

第三部分 网络测试

# 测试网络test_date_file = open("mnist_test.csv","r")
test_date_list = test_date_file.readlines()
test_date_file.close()# 创建空列表,用作积分卡,在测试每条记录之后都会进行更新
scorecard=[]
b=0
for record in test_date_list:all_values = record.split(',')inputs = (numpy.asfarray(all_values[1:])/255.0*0.99)+0.01
#     目标标签correct_label=int(all_values[0])outputs = n.query(inputs)
#     测试所得标签label=numpy.argmax(outputs)#   如果相等,在记分卡追加1,不相等0if(label==correct_label):scorecard.append(1)else:scorecard.append(0)#    b用来计数,查看测试进度   b= b+1if(b%1000==0):print(b)pass#输出正确率
scorecard_array=numpy.asarray(scorecard)
print("Accuracy= ",scorecard_array.sum()/scorecard_array.size)

结果:

模型改进:

1.调整学习率,变大,变小

  • 当前学习率为0.1,准确率为0.9477
  • 调整学习率为0.2,学习率有所提升.

  • 调整为0.05,学习率有所下降

2.多次运行,训练一次称为一个世代

3.改变网络形状,改变隐藏节点的数量等

python实现mnist手写数字识别相关推荐

  1. 基于TensorFlow深度学习框架,运用python搭建LeNet-5卷积神经网络模型和mnist手写数字识别数据集,设计一个手写数字识别软件。

    本软件是基于TensorFlow深度学习框架,运用LeNet-5卷积神经网络模型和mnist手写数字识别数据集所设计的手写数字识别软件. 具体实现如下: 1.读入数据:运用TensorFlow深度学习 ...

  2. Python实现深度学习MNIST手写数字识别(单文件,非框架,无需GPU,适合初学者)

    注: 本文根据阿卡蒂奥的Python深度学习博客文章代码进行调整,修复了少量问题,原文地址:https://blog.csdn.net/akadiao/article/details/78175737 ...

  3. python cnn代码详解图解_基于TensorFlow的CNN实现Mnist手写数字识别

    本文实例为大家分享了基于TensorFlow的CNN实现Mnist手写数字识别的具体代码,供大家参考,具体内容如下 一.CNN模型结构 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5* ...

  4. 用python的numpy实现mnist手写数字识别

    完整代码的文章底部(Optimization_mnist.py和lr_utils.py),原理和公式部分可以看前面文章,转载文章请附上本文链接 学完前面(1到6)文章就完成了吴恩达deeplearni ...

  5. 用MXnet实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别 (zz)

    用MXnet实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别 我想写一系列深度学习的简单实战教程,用mxnet做实现平台的实例代码简单讲解深度学习常用的一些技术方向和实战样例.这 ...

  6. TensorFlow高阶 API: keras教程-使用tf.keras搭建mnist手写数字识别网络

    TensorFlow高阶 API:keras教程-使用tf.keras搭建mnist手写数字识别网络 目录 TensorFlow高阶 API:keras教程-使用tf.keras搭建mnist手写数字 ...

  7. 将tensorflow训练好的模型移植到Android (MNIST手写数字识别)

    将tensorflow训练好的模型移植到Android (MNIST手写数字识别) [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/det ...

  8. TensorFlow 2.0 mnist手写数字识别(CNN卷积神经网络)

    TensorFlow 2.0 (五) - mnist手写数字识别(CNN卷积神经网络) 源代码/数据集已上传到 Github - tensorflow-tutorial-samples 大白话讲解卷积 ...

  9. mnist手写数字识别python_Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】...

    本文实例讲述了Python tensorflow实现mnist手写数字识别.分享给大家供大家参考,具体如下: 非卷积实现 import tensorflow as tf from tensorflow ...

最新文章

  1. (原創) 如何將CMOS所擷取的影像傳到PC端? (SOC) (DE2) (TRDB-DC2)
  2. Quartz2.2.1开发问题
  3. 云原生是企业数字创新的最短路径
  4. 网站设计之Flash简单动画入门介绍(一)字体闪烁及渐显
  5. hash redis springboot_Redis常见的工作场景使用实战,Redisson分布式锁的实现
  6. 以A表中的值快速更新B表中记录的方法
  7. Ubuntu 12.04 LTS安装VMware Tools:无法找到kernel header path的问题
  8. 分布式锁和mysql事物扣库存_浅谈库存扣减和锁
  9. 程序员面试金典——18.10字符串变换
  10. oracle的解析計劃,Oracle中获取执行计划的几种方法分析
  11. 学习 openssl 证书命令
  12. 程序员的SQL金典-杨中科
  13. .ftl文件 是什么文件
  14. cpu多开测试软件,游戏多开CPU优化工具
  15. Java文件操作、IO流
  16. MYSQL查询优化一
  17. [转载]汇编语言程序设计第二版答案  沈美明
  18. 机器学习“调音师”:如何及何时重新调校ML
  19. 教小白使用Vmware安装苹果虚拟机
  20. ubuntu18.04系统安装WiFi适配器驱动

热门文章

  1. 信息系统安全实验——Week 10
  2. 5000词学英语——DAY9
  3. 利用jenkins发送测试报告模板
  4. Voron2.2 3D打印机制作-软件篇(1)
  5. 什么是交换机,交换机的工作原理
  6. 简单的医院挂号排队系统(c语言)
  7. Conflux 树图区块链 “数字藏品 合约标准和编写规范
  8. 库 中无法显示导航窗格,只显示文件夹
  9. iOS 删除 SceneDelegeta.h
  10. 单件模式之可乐瓶实现