python_神經網絡識別手寫數字0-9


 

  1 import numpy as np
  2 import matplotlib.pyplot as plt

5 import struct 6 i=0 7 #讀取訓練數據 8 file_list=['train-images.idx3-ubyte','train-labels.idx1-ubyte','t10k-images.idx3-ubyte','t10k-labels.idx1-ubyte'] 9 with open('./sjwl/train-images.idx3-ubyte','rb') as f: 10 header_data=f.read(16) 11 image_data=[] 12 image=[] 13 while i<1000: 14 im=f.read(28*28) 15 image_data.append(im) 16 tp=struct.unpack('784B',image_data[i]) 17 image.append(tp) 18 i=i+1 19 with open('./sjwl/train-labels.idx1-ubyte','rb') as f: 20 header_label=f.read(8) 21 labels_data=[] 22 labels=[] 23 i=0 24 while i<1000: 25 la=f.read(1) 26 labels_data.append(la) 27 label=struct.unpack('>B',labels_data[i]) 28 labels.append(label) 29 i=i+1 30 #sigmoid函數 31 def sigmoid(x): 32 y=1/(1+np.exp(-x)) 33 return y 34 #學習率eta 35 eta=0.2 36 #創建隱層 37 b=np.zeros((1,100))#隱層輸出矩陣,隱層神經元個數 38 alpha=np.zeros((1,100))#隱層神經元輸入 39 eh=np.zeros((1,100))#隱層梯度項 40 #創建輸出層 41 y=np.zeros((1,10))#輸出層輸出 42 beta=np.zeros((1,10))#輸出層輸入 43 gj=np.zeros((1,10))#輸出層梯度項 44 #定義連接權 45 v=np.random.rand(784,100)#輸入層-隱層-連接權 46 delt_v=np.zeros((784,100))#輸入層-隱層-連接權-誤差 47 w=np.random.rand(100,10)#隱層-輸出層-連接權 48 delt_w=np.zeros((100,10))#隱層-輸出層-連接權-誤差 49 #定義閾值 50 thita=np.random.rand(1,10)#輸出層神經元閾值 51 delt_thita=np.zeros((1,10))#輸出層神經元閾值-誤差 52 gamma=np.random.rand(1,100)#隱層神經元閾值 53 delt_gamma=np.zeros((1,100))#隱層神經元閾值-誤差 54 #循環 55 for daishu in range(1000): 56 for n in range(100): 57 image_=np.asarray(image[n]) 58 shuru=np.asarray(image_) 59 shuru=shuru/255 60 mubiao=np.asarray(labels[n]) 61 if mubiao[0]==0: 62 mubiaojz=np.asarray([1,0,0,0,0,0,0,0,0,0]) 63 elif mubiao[0]==1: 64 mubiaojz=np.asarray([0,1,0,0,0,0,0,0,0,0]) 65 elif mubiao[0]==2: 66 mubiaojz=np.asarray([0,0,1,0,0,0,0,0,0,0]) 67 elif mubiao[0]==3: 68 mubiaojz=np.asarray([0,0,0,1,0,0,0,0,0,0]) 69 elif mubiao[0]==4: 70 mubiaojz=np.asarray([0,0,0,0,1,0,0,0,0,0]) 71 elif mubiao[0]==5: 72 mubiaojz=np.asarray([0,0,0,0,0,1,0,0,0,0]) 73 elif mubiao[0]==6: 74 mubiaojz=np.asarray([0,0,0,0,0,0,1,0,0,0]) 75 elif mubiao[0]==7: 76 mubiaojz=np.asarray([0,0,0,0,0,0,0,1,0,0]) 77 elif mubiao[0]==8: 78 mubiaojz=np.asarray([0,0,0,0,0,0,0,0,1,0]) 79 elif mubiao[0]==9: 80 mubiaojz=np.asarray([0,0,0,0,0,0,0,0,0,1]) 81 #計算輸出 82 alpha=shuru@v 83 alpha=alpha/100 84 b=sigmoid(alpha-gamma) 85 beta=b@w 86 beta=beta/100 87 y=sigmoid(beta-thita) 88 #計算輸出層神經元梯度項 89 gj=y*(1-y)*(mubiaojz-y) 90 #計算隱層神經元梯度項 91 eh=b*(1-b)*(gj@w.T) 92 #更新鏈接權 93 delt_w=eta*b.T@gj 94 delt_thita=-eta*gj 95 shuru=shuru.reshape(1,784) 96 delt_v=eta*shuru.T@eh 97 delt_gamma=-eta*eh 98 w=w+delt_w 99 thita=thita+delt_thita 100 v=v+delt_v 101 gamma=gamma+delt_gamma

運行完測試一下

數字0

輸出結果矩陣y

代表數字0的y[0]=0.957864064,代表1-9的y[1:9]的結果接近於0,識別結果是數字0。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM