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 相关文章推荐
精确查找PHP WEBSHELL木马的方法(1)
Apr 12 Python
python多进程共享变量
Apr 06 Python
python2.7的编码问题与解决方法
Oct 04 Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
Python中的Django基本命令实例详解
Jul 15 Python
Python并发:多线程与多进程的详解
Jan 24 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
python实现可逆简单的加密算法
Mar 22 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
python中count函数简单的实例讲解
Feb 06 Python
python怎么自定义捕获错误
Jun 29 Python
如何清空python的变量
Jul 05 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
php防注入及开发安全详细解析
2013/08/09 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
JavaScript 高级语法介绍
2009/06/15 Javascript
Javascript 汉字字节判断
2009/08/01 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
初识Node.js
2015/03/20 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
python实现简单遗传算法
2018/03/19 Python
js实现弹框效果
2021/03/24 Javascript
500字作文之难忘的同学
2019/12/20 职场文书
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python