【问题标题】:Generalized Back Propagation Algorithm for Neural Networks?神经网络的广义反向传播算法?
【发布时间】:2022-06-19 12:27:26
【问题描述】:

我正在从头开始制作一个神经网络程序,我正在尝试使用 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]) 是基于我在白板上写的一些数学,但现在似乎是错误的。除了线性激活函数之外,我不确定如何修复此算法或如何使其与激活函数一起工作。有人有什么建议吗?

编辑: 包括一些临时工作 Gradient of F Previous Layers

【问题讨论】:

  • 你能把你写在白板上的数学包括进去吗?
  • 哦,是的,我会尝试添加照片

标签: python math neural-network gradient-descent


【解决方案1】:

我重写了我的数学并找出了我的问题。从这里我重写了代码,以便它现在可以工作。这是新代码:

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

【讨论】:

    猜你喜欢
    • 2017-09-28
    • 1970-01-01
    • 2015-03-03
    • 2012-02-21
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多