標準BP演算法用Python程式設計實現

2021-09-28 14:39:42 字數 2600 閱讀 9680

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...