今天开始学习神经网络这一部分了,决定把自己的学习体会记录下来,加深理解。
import numpy as np
b=0
a=0.5
x=np.array([[0,1,1],[0,1,0],[0,0,0],[0,0,1]])
d=np.array([1,1,0,1])
w=np.array([b,0,0])
def sgn(v):
if v>0:
return 1
else:
return 0
def comy(myw,myx):
return sgn(np.dot(myw.T,myx))
def neww(oldw,myd,myx,a):
return oldw+a*(myd-comy(oldw,myx))*myx
i=0
for xn in x:
w=neww(w,d[i],xn,a)
i+=1
for xn in x:
print "%d or %d => %d"%(xn[1],xn[2],comy(w,xn))
以上是一个简单的 “或” 神经网络,这段代码的难点在于return oldw+a*(myd-comy(oldw,myx))*myx,这段循环的意义在于得到一个接近真实值的权重w,其中myd是指真实的值,oldw是指当前的权重w,myx是指当前的x值,a代表学习速率(就是快慢),形象的说,这段代码就是为了不断逼近正确的y值,当权重过大myd-comy(oldw,myx)<0,为负,所以新的权重值减小,反之权重增大。