需要帮助了解安得烈NG ML反向传播

2024-06-06 08:37:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我指的是用Python实现Andrew NG课程的代码。我不明白for循环的最后两行(grad1和grad2)到底发生了什么

grad1 = np.zeros((Theta1.shape))
grad2 = np.zeros((Theta2.shape))

for i in range(m):
    xi= X[i,:] # 1 X 401
    a1i = a1[i,:] # 1 X 26
    a2i =a2[i,:] # 1 X 10
    d2 = a2i - y10[i,:]
    d1 = Theta2.T @ d2.T * sigmoidGradient(np.hstack((1,xi @ Theta1.T)))
    grad1= grad1 + d1[1:][:,np.newaxis] @ xi[:,np.newaxis].T
    grad2 = grad2 + d2.T[:,np.newaxis] @ a1i[:,np.newaxis].T
    
grad1 = 1/m * grad1
grad2 = 1/m * grad2

grad1_reg = grad1 + (Lambda/m) * np.hstack((np.zeros((Theta1.shape[0],1)),Theta1[:,1:]))
grad2_reg = grad2 + (Lambda/m) * np.hstack((np.zeros((Theta2.shape[0],1)),Theta2[:,1:]))

Tags: fornpzerosd2d1shapexinewaxis
1条回答
网友
1楼 · 发布于 2024-06-06 08:37:38
d1[1:][:,np.newaxis] @ xi[:,np.newaxis].T

计算偏梯度w.r.t.θ1,以及

d2.T[:,np.newaxis] @ a1i[:,np.newaxis].T 

对于θ2。它们可以通过链式规则导出。
for循环对每批数据的梯度求和

相关问题 更多 >