需要帮助理解 Andrew NG ML 反向传播
need help understanding Andrew NG ML Backpropogation
我指的是在 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:]))
d1[1:][:,np.newaxis] @ xi[:,np.newaxis].T
计算局部梯度w.r.t。 Theta1,和
d2.T[:,np.newaxis] @ a1i[:,np.newaxis].T
对于 Theta2。它们可以通过链式法则推导出来。
for 循环对每批数据的梯度求和。
我指的是在 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:]))
d1[1:][:,np.newaxis] @ xi[:,np.newaxis].T
计算局部梯度w.r.t。 Theta1,和
d2.T[:,np.newaxis] @ a1i[:,np.newaxis].T
对于 Theta2。它们可以通过链式法则推导出来。
for 循环对每批数据的梯度求和。