python - NN 的反向传播是否正确
问题描述
我有 3 层神经网络。输入 3 个神经元,然后 3 个使用 RELU 激活,然后 3 个使用 Sigmoig 激活,然后 3 个使用 Softmax 激活(其输出)。还有权重:
W = np.array([[[0.1, 0.2, 0.3],
[0.3, 0.2, 0.7],
[0.1, 0.2, 0.3]],
[[0.2, 0.3, 0.5],
[0.3, 0.5, 0.7],
[0.6, 0.4, 0.8]],
[[0.1, 0.4, 0.8],
[0.3, 0.7, 0.2],
[0.5, 0.2, 0.9]]])
输入和结果:
X = np.array([0.1, 0.2, 0.7])
Y = np.array([1.0, 0.0, 0.0])
前馈:
Z1 = W[0] @ X
H1 = RELU(Z1)
Z2 = W[1] @ H1
H2 = Sigmoid(Z2)
Z3 = W[2] @ H2
H3 = Softmax(Z3)
Loss = CrossEntropy(Ypred,Y)
反向传播:
dLoss = dCrossEntropy(Ypred, Y)
o_error = dLoss
o_delta = dLoss*(dSoftmax(o_error))
z2_error = o_delta*(W[2].T)
z2_delta = z2_error * dSigmoid(Z2)
z1_error = z2_error*(W[1].T)
z1_delta = z1_error * dRELU(Z1)
W[0] += X.T.dot(z1_delta)
W[1] += (Z1.T).dot(z1_delta)
W[2] += (Z2.T).dot(o_delta)
我在反向传播中正确吗?
解决方案
推荐阅读
- python - 为什么 IndexError:索引 1 超出轴 0 的范围,大小为 1
- debugging - 有没有办法直接在gdb或者lldb中运行Cargo搭建的程序?
- php - 如何在重定向到同一页面时在php中聚焦页面的特定部分
- python - 使用正则表达式捕获撇号
- elixir - Compose Ecto Queries in Elixir
- python - Why is an __init__ skipped when doing Base.__init__(self) in multiple inheritance instead of super().__init__()?
- sql - 查询根据文件名上的时间戳获取过去 24 小时内收到的记录
- javascript - JQuery .replaceWith function only provides raw html
- deployment - build running automatically in gitlab
- input - Only allow numbers and one dot with 2 decimal places restriction in keypress vuejs