计算机毕业设计中用python神经网络编程实现手写数字识别

本文实例为大家分享了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神经网络编程》中代码,仅做记录,以备后用。 

```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)
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值