def compute_numerical_gradient(nn, theta): """ 进行近似的数值梯度计算 """ numgrad = np.zeros((theta.size, 1)) perturb = np.zeros((theta.size, 1)) e = 1e-4 # 已经将参数展成了一个长向量, 对每一个参数进行梯度检查, 检查时仅修改该参数, 其余参数不变 for p in range(theta.size): # 设置偏移值 perturb[p] = e loss1, _ = nn.cost_function(theta - perturb) loss2, _ = nn.cost_function(theta + perturb) # 计算数值梯度 numgrad[p] = (loss2 - loss1) / (2 * e) perturb[p] = 0 # 恢复避免扰乱其他的值计算 return numgrad