異或問題,即判斷兩個輸入x1,x2是否一致。
下面是用Python實現(xiàn)的代碼
importnumpyasnpnp.random.seed(1)#生成輸入向量XX=np.array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]])#生成目標向量yy=np.array([[0],[1],[1],[0]])#定義sigmoid和它的導函數(shù)defnonlin(x,deriv=False):if(deriv==True):returnx*(1-x)return1/(1+np.exp(-x))#隨機生成初始的隨機向量syn0=2*np.random.random((3,4))-1syn1=2*np.random.random((4,1))-1#一開始我們先來5萬次循環(huán)吧:)forjinxrange(50000):#在反向傳播前先正向傳播,計算出每一層的輸出l0=Xl1=nonlin(np.dot(l0,syn0))l2=nonlin(np.dot(l1,syn1))#計算出輸入層和目標向量的差值(輸出誤差)l2_error=y-l2#每循環(huán)一萬次,打印一次輸出誤差的數(shù)值if(j%10000)==0:print"Error:"+str(np.mean(np.abs(l2_error)))print(l2)#計算輸出層的誤差l2_delta=l2_error*nonlin(l2,deriv=True)#計算前一層對后一層的誤差影響l1_error=l2_delta.dot(syn1.T)#計算輸入層對整體的誤差l1_delta=l1_error*nonlin(l1,deriv=True)#修改權(quán)重向量讓結(jié)果越來越逼近目標向量syn1+=l1.T.dot(l2_delta)syn0+=l0.T.dot(l1_delta)如果你執(zhí)行了上面的代碼,你會發(fā)現(xiàn)這種非線性的多層神經(jīng)網(wǎng)絡成功地解決了異或問題,當輸入x1,x2相同時,會輸出0,不相同時,會輸出1。
喜歡人工智能,算法,Python、JavaScript、Java相關話題,就關注:編程快訊
喜歡的朋友可以點贊、關注、轉(zhuǎn)發(fā)、評論!同時歡迎大家在評論中補充不足的地方!