[英]When should Back-propagation algorithm be called during Neural Network training?
[英]Generalized Back Propagation Algorithm for Neural Networks?
我正在從頭開始制作一個神經網絡程序,我正在嘗試使用 Python 和 numpy 制作一個廣義梯度下降和反向傳播算法。 現在它看起來像這樣:
def back_prop(y, layers, lr=10e-8):
for i in range(len(weights) - 1, -1, -1):
cost = -1.0*(y - layers[i+1])
for j in range(len(weights[i])):
for k in range(len(weights[i][0])):
weights[i][j][k] -= lr*2*cost[j]*layers[i][k]
for j in range(len(biases[i])):
biases[i][j] -= lr*2*cost[j]
y = la.inv(weights[i].T @ weights[i]) @ weights[i].T @ (y - biases[i])
return 0
這里,y表示標簽y或實際y,layers表示前向傳播后的神經網絡層數。 此代碼似乎適用於沒有激活函數(或線性激活函數)的 1 層神經網絡。 1 層神經網絡只是一個權重矩陣和一個偏置向量。 如果我嘗試制作更多圖層並且包含激活功能,則它不起作用。 我寫的那行: y = la.inv(weights[i].T @ weights[i]) @ weights[i].T @ (y - biases[i])
是基於我在白板上寫的一些數學,但現在看來是錯的。 除了線性激活函數之外,我不確定如何修復此算法或如何使其與激活函數一起工作。 有人有什么建議嗎?
我重寫了我的數學並找出了我的問題。 從這里我重寫了代碼,以便它現在可以工作。 這是新代碼:
def back_prop(y, layers, lr=10e-8):
cost = -1.0 * (y - layers[len(weights)])
for i in range(len(weights) - 1, -1, -1):
newcost = 1.0 * weights[i].T @ cost
for j in range(len(weights[i])):
for k in range(len(weights[i][j])):
weights[i][j][k] -= lr*2*cost[j]*layers[i][k]
for j in range(len(biases[i])):
biases[i][j] -= lr*2*cost[j]
cost = newcost
return 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.