也許是最簡單的BP神經網路python實現
阿新 • • 發佈:2021-02-05
前菜
-
這是個最基本的bp神經網路,今天我們就用python的numpy來實現它!
-
sigmoid函式:
話不多說,上程式碼!
from numpy import exp, array, random, dot
# 訓練資料 輸入
training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])
# 訓練資料 輸出
training_set_outputs = array([[0, 1, 1, 0]]).T
# seed是限制隨機數,使其生成的都是同一個
random. seed(1)
# 生成隨機數,三行一列
synaptic_weight = 2 * random.random((3, 1)) - 1
# 迭代一萬次,進行訓練
for iteration in range(10000):
# 將訓練集的輸入和權重dot進行矩陣相乘,結果輸入到sigmoid函式中
output = 1 / (1 + exp(-(dot(training_set_inputs, synaptic_weight))))
# 權重調整採用誤差加權導數公式
synaptic_weight += dot(training_set_inputs.T, (training_set_outputs - output) * output * (1 - output))
# synaptic_weight是最終的權重,array([1,0,0])是測試資料,同樣是sigmoid函式
print(1 / (1 + exp(-dot(array([1, 0, 0]), synaptic_weight))))
除了註釋,實際9行程式碼。
BP神經網路就這麼簡單?不過如此?
非也!這連冰山一角都算不上。(冰山一角,是水的密度為1,冰的密度是0.9,所以冰的1/10會露出在水面之上)
持續關注吧!
peace&love