def seed(d,q,l): # d代輸入層神經元個數,q代表隱層神經元的個數,l代表輸出層元素的個數,該函式用來初始化權重和閾值
v=np.array([[random.random() for i in range(q)] for j in range(d)]) #初始化輸入層到隱層權重
#print(v)
w=np.array([[random.random() for i in range(l)] for j in range(q)]) #初始化隱層到輸出層權重
hyu=np.array([random.random() for i in range(q)])#初始化化隱藏層閾值
oyu=np.array([random.random() for i in range(l)]) #初始化輸出層閾值
return v,w,hyu,oyu
def forward(indata,hyu,oyu):#需要傳遞進去樣本屬性值indata
a=np.dot(indata,v)#隱層輸入
#print(a.shape)
h=sigmoid(a-hyu)
h=np.array(h)
b=np.dot(h,w)
forwardy=sigmoid(b-oyu)
return forwardy,b,h
def sigmoid(x):
for i in range(len(x)):
x[i]=1/(1+math.exp(-x[i]))
return x
』 --main-- 』
print(『請輸入隱層神經元的個數』)
f=int(input())
print(『程式正在執行』)
datanum=pd.read_csv(「watermelon_data.csv」,delimiter=",") #將西瓜資料3.0放入data矩陣
datanum=np.array(datanum)
m,n=datanum.shape #確定矩陣的行和列
#datanum=random.random(size=(m,n))
#for i in range(m):
datanum=np.array(datanum)#矩陣
m,n=np.shape(datanum)#shape 為矩陣的行數和每行包含的個數
data=datanum[:,:n-1]#提取西瓜的屬性資料
label=datanum[:,n-1:n] #提取西瓜標籤
m,n=data.shape
v,w,hyu,oyu=seed(n,f,1)
d=nq=f
l=1eta=0.2 #步長
z=5000
while (z>0):
z-=1
esum=0
for i in range(m):
y,b,h=forward(data[i],hyu,oyu) #前向傳播並返回**值y,隱層輸出h,輸出層輸入b
e=sum((y-label[i])(y-label[i]))/2
g=y(1-y)(label[i]-y)
#eh=h(1-h)((np.dot(w,g.t)).t)
eh=h(1-h)(np.dot(w,g))
w=w+etanp.dot(h.reshape(q,1),g.reshape(1,l))
oyu=oyu-etag
v=v+etanp.dot(data[i].reshape((d,1)),eh.reshape((1,q)))
hyu=hyu-eta*eh
predict=random.random(size=(m,1))
for i in range(m):
y,b,h=forward(data[i],hyu,oyu)
predict[i]=y #把**結果放在乙個矩陣裡面
if y>0.5:
print(『**』,『好瓜』,』~』,『真值』,label[i])
else:
print(『**』,『壞瓜』,』~』,『真值』,label[i])
print(predict)
BP神經網路演算法
bp神經網路是一種基於有監督的學習,使用非線性可導函式作為傳遞函式的前饋神經網路。一 模型 bp神經網路由輸入層 隱含層 輸出層組成。訓練過程分為網路輸入訊號正向傳播和誤差訊號反向傳播,按有監督學習方式進行訓練。1 相鄰層之間結點的連線有乙個權重wij,其值在 1,1 之間 2 每乙個神經單元都有一...
BP神經網路演算法
bp back propagation 神經網路是在1986年被rumelhart與mccelland等科學家提出的概念,正如名字所說,它是一種back propagation型的網路,它將訓練誤差進行逆向傳播,通過前饋的方式不斷修正網路中各神經元的權值,而進行自身學習的。bp神經網路拓撲結構包含有...
BP神經網路演算法實現
bp神經網路演算法實現 include include include include define nh 3 輸入層 define ni 4 隱層 define nj 1 輸出層 define nk 100 樣本容量 define test 70 測試集容量 define nr 0.7 學習效率 ...