簡體   English   中英

神經網絡的廣義反向傳播算法?

[英]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])是基於我在白板上寫的一些數學,但現在看來是錯的。 除了線性激活函數之外,我不確定如何修復此算法或如何使其與激活函數一起工作。 有人有什么建議嗎?

編輯:包括F先前圖層的一些草稿工作漸變

我重寫了我的數學並找出了我的問題。 從這里我重寫了代碼,以便它現在可以工作。 這是新代碼:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM