python神經(jīng)網(wǎng)絡(luò)編程實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別
本文實(shí)例為大家分享了python實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別的具體代碼,供大家參考,具體內(nèi)容如下
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神經(jīng)網(wǎng)絡(luò)編程》中代碼,僅做記錄,以備后用。
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
圖片對(duì)應(yīng)像素的讀取。因訓(xùn)練集灰度值與實(shí)際相反,故用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)
嘗試統(tǒng)計(jì)了對(duì)于各個(gè)數(shù)據(jù)測(cè)試數(shù)量及正確率。
原本想驗(yàn)證書(shū)后向后查詢(xún)中數(shù)字‘9'識(shí)別模糊是因?yàn)橛?xùn)練數(shù)量不足或錯(cuò)誤率過(guò)高而產(chǎn)生,然最終結(jié)果并不支持此猜想。
另書(shū)中只能針對(duì)特定像素的圖片進(jìn)行學(xué)習(xí),真正手寫(xiě)的圖片并不能滿(mǎn)足訓(xùn)練條件,實(shí)際用處仍需今后有時(shí)間改進(jìn)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
對(duì)python特殊函數(shù) __call__()的使用詳解
今天小編就為大家分享一篇對(duì)python特殊函數(shù) __call__()的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Python word2vec訓(xùn)練詞向量實(shí)例分析講解
這篇文章主要介紹了Python word2vec訓(xùn)練詞向量實(shí)例分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-12-12nlp自然語(yǔ)言處理基于SVD的降維優(yōu)化學(xué)習(xí)
這篇文章主要為大家介紹了nlp自然語(yǔ)言處理基于SVD的降維優(yōu)化學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04Python類(lèi)的動(dòng)態(tài)綁定實(shí)現(xiàn)原理
這篇文章主要介紹了Python類(lèi)的動(dòng)態(tài)綁定實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03opencv+python實(shí)現(xiàn)均值濾波
這篇文章主要為大家詳細(xì)介紹了opencv+python實(shí)現(xiàn)均值濾波,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02Python3.5面向?qū)ο笈c繼承圖文實(shí)例詳解
這篇文章主要介紹了Python3.5面向?qū)ο笈c繼承,結(jié)合圖文與實(shí)例形式詳細(xì)分析了Python3.5面向?qū)ο笈c繼承的相關(guān)概念、原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2019-04-04scrapy框架攜帶cookie訪問(wèn)淘寶購(gòu)物車(chē)功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了scrapy框架攜帶cookie訪問(wèn)淘寶購(gòu)物車(chē),本文通過(guò)實(shí)例代碼圖文詳解給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07PyCharm利用pydevd-pycharm實(shí)現(xiàn)Python遠(yuǎn)程調(diào)試的詳細(xì)過(guò)程
這篇文章主要介紹了PyCharm利用pydevd-pycharm實(shí)現(xiàn)Python遠(yuǎn)程調(diào)試,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09加速Python代碼執(zhí)行利器使用實(shí)例探究
這篇文章主要為大家介紹了加速Python代碼執(zhí)行的利器使用實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01