时间:2021-05-22
本文实例为大家分享了python实现手写数字识别的具体代码,供大家参考,具体内容如下
import numpyimport 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=784hidden_nodes=100output_nodes=10learning_rate=0.1n=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=2for 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 numpyimport scipy.special#import matplotlib.pyplotimport scipy.miscfrom PIL import Imageclass 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=784hidden_nodes=100output_nodes=10learning_rate=0.1n=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.01outputs=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)尝试统计了对于各个数据测试数量及正确率。
原本想验证书后向后查询中数字‘9'识别模糊是因为训练数量不足或错误率过高而产生,然最终结果并不支持此猜想。
另书中只能针对特定像素的图片进行学习,真正手写的图片并不能满足训练条件,实际用处仍需今后有时间改进。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
说明本例子利用TensorFlow搭建一个全连接神经网络,实现对MNIST手写数字的识别。先上代码fromtensorflow.examples.tutoria
环境:Python+keras,后端为Tensorflow训练集:MNIST对于如何训练一个识别手写数字的神经网络,网上资源十分丰富,并且能达到相当高的精度。但
手写数字识别算法的设计与实现本文使用python基于TensorFlow设计手写数字识别算法,并编程实现GUI界面,构建手写数字识别系统。这是本人的本科毕业论文
本文学习NeuralNetworksandDeepLearning在线免费书籍,用python构建神经网络识别手写体的一个总结。代码主要包括两三部分:1)、数据
python实现简单神经网络算法,供大家参考,具体内容如下python实现二层神经网络包括输入层和输出层importnumpyasnp#sigmoidfunct