コード例 #1
0
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