【发布时间】: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