国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

BP神經(jīng)網(wǎng)絡(luò)原理及Python實(shí)現(xiàn)代碼

2020-02-16 00:11:12
字體:
供稿:網(wǎng)友

本文主要講如何不依賴TenserFlow等高級(jí)API實(shí)現(xiàn)一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)來做分類,所有的代碼都在下面;在構(gòu)造的數(shù)據(jù)(通過程序構(gòu)造)上做了驗(yàn)證,經(jīng)過1個(gè)小時(shí)的訓(xùn)練分類的準(zhǔn)確率可以達(dá)到97%。

完整的結(jié)構(gòu)化代碼見于:鏈接地址

先來說說原理

網(wǎng)絡(luò)構(gòu)造

上面是一個(gè)簡(jiǎn)單的三層網(wǎng)絡(luò);輸入層包含節(jié)點(diǎn)X1 , X2;隱層包含H1,H2;輸出層包含O1。
輸入節(jié)點(diǎn)的數(shù)量要等于輸入數(shù)據(jù)的變量數(shù)目。
隱層節(jié)點(diǎn)的數(shù)量通過經(jīng)驗(yàn)來確定。
如果只是做分類,輸出層一般一個(gè)節(jié)點(diǎn)就夠了。

從輸入到輸出的過程

1.輸入節(jié)點(diǎn)的輸出等于輸入,X1節(jié)點(diǎn)輸入x1時(shí),輸出還是x1.
2. 隱層和輸出層的輸入I為上層輸出的加權(quán)求和再加偏置,輸出為f(I) , f為激活函數(shù),可以取sigmoid。H1的輸出為 sigmoid(w1x1 + w2x2 + b)

誤差反向傳播的過程

Python實(shí)現(xiàn)

構(gòu)造測(cè)試數(shù)據(jù)

# -*- coding: utf-8 -*-import numpy as npfrom random import random as rdn'''說明:我們構(gòu)造1000條數(shù)據(jù),每條數(shù)據(jù)有三個(gè)屬性(用a1 , a2 , a3表示)a1 離散型 取值 1 到 10 , 均勻分布a2 離散型 取值 1 到 10 , 均勻分布a3 連續(xù)型 取值 1 到 100 , 且符合正態(tài)分布 各屬性之間獨(dú)立。共2個(gè)分類(0 , 1),屬性值與類別之間的關(guān)系如下,0 : a1 in [1 , 3] and a2 in [4 , 10] and a3 <= 501 : a1 in [1 , 3] and a2 in [4 , 10] and a3 > 500 : a1 in [1 , 3] and a2 in [1 , 3] and a3 > 301 : a1 in [1 , 3] and a2 in [1 , 3] and a3 <= 300 : a1 in [4 , 10] and a2 in [4 , 10] and a3 <= 501 : a1 in [4 , 10] and a2 in [4 , 10] and a3 > 500 : a1 in [4 , 10] and a2 in [1 , 3] and a3 > 301 : a1 in [4 , 10] and a2 in [1 , 3] and a3 <= 30'''def genData() : #為a3生成符合正態(tài)分布的數(shù)據(jù) a3_data = np.random.randn(1000) * 30 + 50 data = [] for i in range(1000) : #生成a1 a1 = int(rdn()*10) + 1 if a1 > 10 :  a1 = 10 #生成a2 a2 = int(rdn()*10) + 1 if a2 > 10 :  a2 = 10 #取a3 a3 = a3_data[i]  #計(jì)算這條數(shù)據(jù)對(duì)應(yīng)的類別 c_id = 0 if a1 <= 3 and a2 >= 4 and a3 <= 50 :  c_id = 0  elif a1 <= 3 and a2 >= 4 and a3 > 50 :  c_id = 1  elif a1 <= 3 and a2 < 4 and a3 > 30 :  c_id = 0 elif a1 <= 3 and a2 < 4 and a3 <= 30 :  c_id = 1 elif a1 > 3 and a2 >= 4 and a3 <= 50 :  c_id = 0  elif a1 > 3 and a2 >= 4 and a3 > 50 :  c_id = 1  elif a1 > 3 and a2 < 4 and a3 > 30 :  c_id = 0 elif a1 > 3 and a2 < 4 and a3 <= 30 :  c_id = 1 else :  print('error') #拼合成字串 str_line = str(i) + ',' + str(a1) + ',' + str(a2) + ',' + str(a3) + ',' + str(c_id) data.append(str_line) return '/n'.join(data)

激活函數(shù)

# -*- coding: utf-8 -*-"""Created on Sun Dec 2 14:49:31 2018@author: congpeiqing"""import numpy as np#sigmoid函數(shù)的導(dǎo)數(shù)為 f(x)*(1-f(x))def sigmoid(x) : return 1/(1 + np.exp(-x))            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 奇台县| 灵武市| 汉寿县| 宁波市| 霍林郭勒市| 广南县| 德安县| 灵璧县| 陈巴尔虎旗| 巴塘县| 那坡县| 普洱| 宝山区| 霸州市| 苏尼特右旗| 浦东新区| 阳高县| 弋阳县| 温州市| 四子王旗| 宝丰县| 公安县| 长宁县| 板桥市| 巫山县| 枞阳县| 蒙阴县| 黑山县| 兰西县| 巨鹿县| 漯河市| 永善县| 松原市| 梁山县| 印江| 南岸区| 应用必备| 元阳县| 永兴县| 珠海市| 安远县|