我有一个代码片段来计算反向传播中使用的梯度值。但是,我不确定如何运行代码以及代码实际在做什么。我的项目要求我基本上使用相同的代码而不进行任何修改。代码片段:
temp = -(training_y - y_hat) * grad_sigmoid(O) * grad_sigmoid(H)
temp = temp @ np.diag(weights2[:-1].reshape(-1))
gradient2 = training_x.T @ temp
gradient2 /= len(training_y)
代码预计会产生梯度值,但是在替换权重时,我很困惑在代码中放入哪个权重以获得哪个梯度。
当您在此处提供代码片段时,您正在尝试计算神经网络中反向传播的梯度值。 (简单来说,反向传播是通过调整输出层到输入层的权重来最小化损失)。
你的第一行代码。
temp = -(training_y - y_hat) * grad_sigmoid(O) * grad_sigmoid(H)
这里计算预测误差并乘以输出层和隐藏层的 sigmoid 激活梯度。
你的第二行代码。 temp = temp @ np.diag(weights2[:-1].reshape(-1)) 这里通过与由这些权重构造的对角矩阵进行元素相乘,将此误差项应用于连接隐藏层和输出层的权重。
你的第三行代码。 梯度2=training_x.T@temp 梯度2 /= len(training_y)
这里通过转置后的输入数据与上一步结果的点积来计算连接隐藏层和输出层的权重的梯度。
我正在努力解决您的困惑,确保您清楚地了解神经网络架构,特别是层之间的连接以及与这些连接相关的权重矩阵。权重应根据网络中的层连接与适当的梯度对齐。