資源簡介
python實現BP神經網絡的源代碼,以及使用的馬疝病數據集,基于BP神經網絡的IRIS數據集訓練和測試,有完整的數據集和實現代碼,直接運行即可得到結果,并顯示,正確率,誤差,迭代次數等參數

代碼片段和文件信息
import?numpy?as?np
def?loaddataset(filename):
fp?=?open(filename)
#存放數據
dataset?=?[]
#存放標簽
labelset?=?[]
for?i?in?fp.readlines():
a?=?i.strip().split()
#每個數據行的最后一個是標簽
dataset.append([float(j)?for?j?in?a[:len(a)-1]])
labelset.append(int(float(a[-1])))
return?dataset?labelset
#x為輸入層神經元個數,y為隱層神經元個數,z輸出層神經元個數
def?parameter_initialization(x?y?z):
#隱層閾值
value1?=?np.random.randint(-5?5?(1?y)).astype(np.float64)
#輸出層閾值
value2?=?np.random.randint(-5?5?(1?z)).astype(np.float64)
#輸入層與隱層的連接權重
weight1?=?np.random.randint(-5?5?(x?y)).astype(np.float64)
#隱層與輸出層的連接權重
weight2?=?np.random.randint(-5?5?(y?z)).astype(np.float64)
return?weight1?weight2?value1?value2
def?sigmoid(z):
return?1?/?(1?+?np.exp(-z))
‘‘‘
weight1:輸入層與隱層的連接權重
weight2:隱層與輸出層的連接權重
value1:隱層閾值
value2:輸出層閾值
‘‘‘
def?trainning(dataset?labelset?weight1?weight2?value1?value2):
#x為步長
x?=?0.01
for?i?in?range(len(dataset)):
#輸入數據
inputset?=?np.mat(dataset[i]).astype(np.float64)
#數據標簽
outputset?=?np.mat(labelset[i]).astype(np.float64)
#隱層輸入
input1?=?np.dot(inputset?weight1).astype(np.float64)
#隱層輸出
output2?=?sigmoid(input1?-?value1).astype(np.float64)
#輸出層輸入
input2?=?np.dot(output2?weight2).astype(np.float64)
#輸出層輸出
output3?=?sigmoid(input2?-?value2).astype(np.float64)
#更新公式由矩陣運算表示
a?=?np.multiply(output3?1?-?output3)
g?=?np.multiply(a?outputset?-?output3)
b?=?np.dot(g?np.transpose(weight2))
c?=?np.multiply(output2?1?-?output2)
e?=?np.multiply(b?c)
value1_change?=?-x?*?e
value2_change?=?-x?*?g
weight1_change?=?x?*?np.dot(np.transpose(inputset)?e)
weight2_change?=?x?*?np.dot(np.transpose(output2)?g)
#更新參數
value1?+=?value1_change
value2?+=?value2_change
weight1?+=?weight1_change
weight2?+=?weight2_change
return?weight1?weight2?value1?value2
def?testing(dataset?labelset?weight1?weight2?value1?value2):
#記錄預測正確的個數
rightcount?=?0
for?i?in?range(len(dataset)):
#計算每一個樣例通過該神經網路后的預測值
inputset?=?np.mat(dataset[i]).astype(np.float64)
outputset?=?np.mat(labelset[i]).astype(np.float64)
output2?=?sigmoid(np.dot(inputset?weight1)?-?value1)
output3?=?sigmoid(np.dot(output2?weight2)?-?value2)
#確定其預測標簽
if?output3?>?0.5:
flag?=?1
else:
flag?=?0
if?labelset[i]?==?flag:
rightcount?+=?1
#輸出預測結果
print(“預測為%d???實際為%d“%(flag?labelset[i]))
#返回正確率
return?rightcount?/?len(dataset)
if?__name__?==?‘__main__‘:
dataset?labelset?=?loaddataset(‘horseColicTraining.txt‘)
weight1?weight2?value1?value2?=?parameter_initialization(len(dataset[0])?len(dataset[0])?1)
for?i?in?range(1500):
weight1?weight2?value1?value2?=?trainning(dataset?labelset?weight1?weight2?value1?value2)
rate?=?testing(dataset?labelset?weight1?weight2?value1?value2)
print(“正確率為%f“%(rate))
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-12-29?19:40??BP紲炵粡緗戠粶\
?????文件????????3722??2019-05-30?20:41??BP紲炵粡緗戠粶\horseColicTest.txt
?????目錄???????????0??2019-12-29?19:40??__MACOSX\
?????目錄???????????0??2019-12-29?19:40??__MACOSX\BP紲炵粡緗戠粶\
?????文件?????????176??2019-05-30?20:41??__MACOSX\BP紲炵粡緗戠粶\._horseColicTest.txt
?????文件???????60357??2019-05-30?20:41??BP紲炵粡緗戠粶\horseColicTraining.txt
?????文件?????????176??2019-05-30?20:41??__MACOSX\BP紲炵粡緗戠粶\._horseColicTraining.txt
?????文件????????3342??2019-06-08?15:35??BP紲炵粡緗戠粶\network.py
?????文件?????????176??2019-06-08?15:35??__MACOSX\BP紲炵粡緗戠粶\._network.py
?????文件?????????176??2019-12-29?19:40??__MACOSX\._BP紲炵粡緗戠粶
評論
共有 條評論