1.需要匯入兩個模組
import pandas as pd
import numpy as np
2.定於啟用函式
def
sigmoid
(x):
return1/
(1+np.exp(
-x))
3.標準bp演算法
def
bp(x_train,y_train,numb,inta)
:#x_train,y_train表示訓練集,numb表示隱層神經元的個數,inta表示學習率
#print('x_train:',x_train)
#print('y_train:',y_train)
v=np.matrix(np.random.rand(
len(x_train.t)
,numb)
)#隨機生成輸入層神經元與隱層神經元之間的連線權
#print('v:',v)
w=np.matrix(np.random.rand(numb,
len(y_train.t)))
#隨機生成隱層神經元與輸出層神經元之間的連線權
#print('w:',w)
thita=np.matrix(np.random.rand(
len(y_train.t)))
#輸出神經元的閾值
#print("thita:",thita)
garma=np.matrix(np.random.rand(numb)
)#輸出神經元的閾值
#print("garma:",garma)
temp=
0for i in
range
(len
(x_train)):
alpha=x_train[i]
.dot(v)
#隱層神經元的輸入
#print('alpha',alpha)
b=sigmoid(alpha)
#隱層神經元的輸出
#print('b',b)
beta=b.dot(w)
#輸出神經元的輸入
#print('beta',beta)
y_estimate=sigmoid(beta-thita)
#求出y的估計值
#print('y_estimate',y_estimate)
g=y_estimate.dot((1
-y_estimate)
.t).dot(y_train[i]
-y_estimate)
#輸出層神經元的梯度
#print('g',g)
e=b.dot((1
-b).t)
.dot(g)
.dot(w.t)
#隱層神經元的梯度
#print('e',e)
e=1/
2*(y_estimate-y_train[i]
).dot(
(y_estimate-y_train[i]
).t)
#均方誤差
#print('e',e)
if e>temp:
#更新連線權和閾值
w=w+inta*
(b.t)
.dot(g)
#print('w',w)
thita=thita-inta*g
#print('thita',thita)
v=v+inta*
(x_train[i]
.t).dot(e)
#print('v',v)
garma=garma-inta*e #隱層神經元的閾值
#print('garma',garma)
temp=e
return w,v,thita,garma
**隨機生成訓練集x與y
x=np.matrix(np.random.rand(3,
4))#輸入層:隨機生成3個樣本,每個樣本有4個神經元
y=np.matrix(np.random.rand(3,
2))#輸出層:隨機生成3個樣本,每個樣本有2個神經元
呼叫bp函式
w,v,thita,garma=bp(x,y,4,
0.01
)#這裡我假設隱層有4個神經元,學習率為0.01
西瓜書 課後習題5 5 標準bp演算法,累計bp演算法
import numpy as np def dataset 西瓜3.0資料集離散化 x np.mat 2,3,3,2,1,2,3,3,3,2,1,1,2,1,3,1,2 1,1,1,1,1,2,2,2,2,3,3,1,2,2,2,1,1 2,3,2,3,2,2,2,2,3,1,1,2,2,3,2,...
Python簡單實現BP演算法
啟用函式為relu函式 import numpy as np n 64 樣本數 d in 1000 輸入維度 h 100 隱藏層維度 d out 10 輸出維度 隨機建立一些訓練資料 x np.random.randn n,d in y np.random.randn n,d out 隨機初始權重 ...
BP演算法 別人用C寫的和用Matlab實現的
匯入資料,之後執行如下 輸入3維訓練向量。已經歸一化處理。traindata.txt 匯入資料 p traindata p p 轉置 輸出1維期望輸出向量。已經歸一化處理。expectation.txt t expectation t t 轉置 輸入向量的取值範圍 0,1 記得是4維 thresho...