python神经网络编程实现手写数字识别


Posted in Python onMay 27, 2020

本文实例为大家分享了python实现手写数字识别的具体代码,供大家参考,具体内容如下

import numpy
import scipy.special
#import matplotlib.pyplot
 
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.normal(0.0,pow(self.hnodes,-0.5),(self.hnodes,self.inodes))
    self.who=numpy.random.normal(0.0,pow(self.onodes,-0.5),(self.onodes,self.hnodes))
    
    self.activation_function=lambda x: scipy.special.expit(x)
    pass
  
  def train(self,inputs_list,targets_list):
    inputs=numpy.array(inputs_list,ndmin=2).T
    targets=numpy.array(targets_list,ndmin=2).T
    
    hidden_inputs=numpy.dot(self.wih,inputs)
    hidden_outputs=self.activation_function(hidden_inputs)
    
    final_inputs=numpy.dot(self.who,hidden_outputs)
    final_outputs=self.activation_function(final_inputs)
    
    output_errors=targets-final_outputs
    hidden_errors=numpy.dot(self.who.T,output_errors)
    
    self.who+=self.lr*numpy.dot((output_errors*final_outputs*(1.0-final_outputs)),numpy.transpose(hidden_outputs))
    self.wih+=self.lr*numpy.dot((hidden_errors*hidden_outputs*(1.0-hidden_outputs)),numpy.transpose(inputs))
    pass
  
  def query(self,input_list):
    inputs=numpy.array(input_list,ndmin=2).T
    
    hidden_inputs=numpy.dot(self.wih,inputs)
    hidden_outputs=self.activation_function(hidden_inputs)
    
    final_inputs=numpy.dot(self.who,hidden_outputs)
    final_outputs=self.activation_function(final_inputs)
    
    return final_outputs
 
 
input_nodes=784
hidden_nodes=100
output_nodes=10
learning_rate=0.1
n=neuralNetwork(input_nodes,hidden_nodes,output_nodes,learning_rate)
 
training_data_file=open(r"C:\Users\lsy\Desktop\nn\mnist_train.csv","r")
training_data_list=training_data_file.readlines()
training_data_file.close()
#print(n.wih)
#print("")
epochs=2
for e in range(epochs):
  for record in training_data_list:
    all_values=record.split(",")
    inputs=(numpy.asfarray(all_values[1:])/255.0*0.99)+0.01
    targets=numpy.zeros(output_nodes)+0.01
    targets[int(all_values[0])]=0.99
    n.train(inputs,targets)
  
#print(n.wih)
#print(len(training_data_list))
#for i in training_data_list:
#  print(i)
 
test_data_file=open(r"C:\Users\lsy\Desktop\nn\mnist_test.csv","r")
test_data_list=test_data_file.readlines()
test_data_file.close()
 
scorecard=[]
 
 
for record in test_data_list:
  all_values=record.split(",")
  correct_lable=int(all_values[0])
  inputs=(numpy.asfarray(all_values[1:])/255.0*0.99)+0.01
  outputs=n.query(inputs)
  label=numpy.argmax(outputs)
  if(label==correct_lable):
    scorecard.append(1)
  else:
    scorecard.append(0)
 
scorecard_array=numpy.asarray(scorecard)
print(scorecard_array)
print("")
print(scorecard_array.sum()/scorecard_array.size)
#all_value=test_data_list[0].split(",")
#input=(numpy.asfarray(all_value[1:])/255.0*0.99)+0.01
#print(all_value[0])
 
#image_array=numpy.asfarray(all_value[1:]).reshape((28,28))
 
#matplotlib.pyplot.imshow(image_array,cmap="Greys",interpolation="None")
#matplotlib.pyplot.show()
#nn=n.query((numpy.asfarray(all_value[1:])/255.0*0.99)+0.01)
#for i in nn :
#  print(i)

《python神经网络编程》中代码,仅做记录,以备后用。 

image_file_name=r"*.JPG"
img_array=scipy.misc.imread(image_file_name,flatten=True)
 
img_data=255.0-img_array.reshape(784)
image_data=(img_data/255.0*0.99)+0.01

图片对应像素的读取。因训练集灰度值与实际相反,故用255减取反。 

import numpy
import scipy.special
#import matplotlib.pyplot
import scipy.misc
from PIL import Image
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.normal(0.0,pow(self.hnodes,-0.5),(self.hnodes,self.inodes))
    self.who=numpy.random.normal(0.0,pow(self.onodes,-0.5),(self.onodes,self.hnodes))
    
    self.activation_function=lambda x: scipy.special.expit(x)
    pass
  
  def train(self,inputs_list,targets_list):
    inputs=numpy.array(inputs_list,ndmin=2).T
    targets=numpy.array(targets_list,ndmin=2).T
    
    hidden_inputs=numpy.dot(self.wih,inputs)
    hidden_outputs=self.activation_function(hidden_inputs)
    
    final_inputs=numpy.dot(self.who,hidden_outputs)
    final_outputs=self.activation_function(final_inputs)
    
    output_errors=targets-final_outputs
    hidden_errors=numpy.dot(self.who.T,output_errors)
    
    self.who+=self.lr*numpy.dot((output_errors*final_outputs*(1.0-final_outputs)),numpy.transpose(hidden_outputs))
    self.wih+=self.lr*numpy.dot((hidden_errors*hidden_outputs*(1.0-hidden_outputs)),numpy.transpose(inputs))
    pass
  
  def query(self,input_list):
    inputs=numpy.array(input_list,ndmin=2).T
    
    hidden_inputs=numpy.dot(self.wih,inputs)
    hidden_outputs=self.activation_function(hidden_inputs)
    
    final_inputs=numpy.dot(self.who,hidden_outputs)
    final_outputs=self.activation_function(final_inputs)
    
    return final_outputs
 
 
input_nodes=784
hidden_nodes=100
output_nodes=10
learning_rate=0.1
n=neuralNetwork(input_nodes,hidden_nodes,output_nodes,learning_rate)
 
training_data_file=open(r"C:\Users\lsy\Desktop\nn\mnist_train.csv","r")
training_data_list=training_data_file.readlines()
training_data_file.close()
#print(n.wih)
#print("")
 
#epochs=2
#for e in range(epochs):
for record in training_data_list:
  all_values=record.split(",")
  inputs=(numpy.asfarray(all_values[1:])/255.0*0.99)+0.01
  targets=numpy.zeros(output_nodes)+0.01
  targets[int(all_values[0])]=0.99
  n.train(inputs,targets)
 
#image_file_name=r"C:\Users\lsy\Desktop\nn\1000-1.JPG"
'''
img_array=scipy.misc.imread(image_file_name,flatten=True)
img_data=255.0-img_array.reshape(784)
image_data=(img_data/255.0*0.99)+0.01
#inputs=(numpy.asfarray(image_data)/255.0*0.99)+0.01
outputs=n.query(image_data)
label=numpy.argmax(outputs)
print(label)
'''
#print(n.wih)
#print(len(training_data_list))
#for i in training_data_list:
#  print(i)
 
test_data_file=open(r"C:\Users\lsy\Desktop\nn\mnist_test.csv","r")
 
test_data_list=test_data_file.readlines()
test_data_file.close()
 
scorecard=[]
 
total=[0,0,0,0,0,0,0,0,0,0]
rightsum=[0,0,0,0,0,0,0,0,0,0]
 
for record in test_data_list:
  all_values=record.split(",")
  correct_lable=int(all_values[0])
  inputs=(numpy.asfarray(all_values[1:])/255.0*0.99)+0.01
  outputs=n.query(inputs)
  label=numpy.argmax(outputs)
  total[correct_lable]+=1
  if(label==correct_lable):
    scorecard.append(1)
    rightsum[correct_lable]+=1
  else:
    scorecard.append(0)
 
scorecard_array=numpy.asarray(scorecard)
print(scorecard_array)
print("")
print(scorecard_array.sum()/scorecard_array.size)
print("")
print(total)
print(rightsum)
for i in range(10):
  print((rightsum[i]*1.0)/total[i])
 
#all_value=test_data_list[0].split(",")
#input=(numpy.asfarray(all_value[1:])/255.0*0.99)+0.01
#print(all_value[0])
 
#image_array=numpy.asfarray(all_value[1:]).reshape((28,28))
 
#matplotlib.pyplot.imshow(image_array,cmap="Greys",interpolation="None")
#matplotlib.pyplot.show()
#nn=n.query((numpy.asfarray(all_value[1:])/255.0*0.99)+0.01)
#for i in nn :
#  print(i)

尝试统计了对于各个数据测试数量及正确率。

python神经网络编程实现手写数字识别

原本想验证书后向后查询中数字‘9'识别模糊是因为训练数量不足或错误率过高而产生,然最终结果并不支持此猜想。

另书中只能针对特定像素的图片进行学习,真正手写的图片并不能满足训练条件,实际用处仍需今后有时间改进。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Web框架Flask信号机制(signals)介绍
Jan 01 Python
python web框架学习笔记
May 03 Python
python实现简单的单变量线性回归方法
Nov 08 Python
Django2.1.3 中间件使用详解
Nov 26 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
python实现两张图片的像素融合
Feb 23 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
Python selenium模拟手动操作实现无人值守刷积分功能
May 13 Python
Python 创建TCP服务器的方法
Jul 28 Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
Sep 23 Python
python安装和pycharm环境搭建设置方法
May 27 #Python
Python中无限循环需要什么条件
May 27 #Python
Python使用matplotlib绘制圆形代码实例
May 27 #Python
Python如何实现的二分查找算法
May 27 #Python
Python xml、字典、json、类四种数据类型如何实现互相转换
May 27 #Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 #Python
Python列表如何更新值
May 27 #Python
You might like
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
JavaScript内核之基本概念
2011/10/21 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
原生javascript实现图片无缝滚动效果
2016/02/12 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
ES6箭头函数和扩展实例分析
2020/05/23 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
python自动翻译实现方法
2016/05/28 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
iPython pylab模式启动方式
2020/04/24 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
Python grpc超时机制代码示例
2020/09/14 Python
家佳咖啡店创业计划书
2013/12/27 职场文书
青年志愿者活动方案
2014/08/17 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers