q2_gradcheck.py 文件源码

python
阅读 24 收藏 0 点赞 0 评论 0

项目:cs224n_assignment 作者: xiaohu2015 项目源码 文件源码
def gradcheck_naive(f, x):
    """ Gradient check for a function f.

    Arguments:
    f -- a function that takes a single argument and outputs the
         cost and its gradients
    x -- the point (numpy array) to check the gradient at
    """

    rndstate = random.getstate()
    random.setstate(rndstate)
    fx, grad = f(x) # Evaluate function value at original point
    h = 1e-4        # Do not change this!

    # Iterate over all indexes in x
    it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite'])
    while not it.finished:
        ix = it.multi_index

        # Try modifying x[ix] with h defined above to compute
        # numerical gradients. Make sure you call random.setstate(rndstate)
        # before calling f(x) each time. This will make it possible
        # to test cost functions with built in randomness later.

        ### YOUR CODE HERE:
        old_value = x[ix]
        random.setstate(rndstate)
        x[ix] = old_value + h
        fxh_left, _ = f(x)
        random.setstate(rndstate)
        x[ix] = old_value - h
        fxh_right, _ = f(x)
        numgrad = (fxh_left - fxh_right) / (2 * h)
        x[ix] = old_value
        ### END YOUR CODE

        # Compare gradients
        reldiff = abs(numgrad - grad[ix]) / max(1, abs(numgrad), abs(grad[ix]))
        if reldiff > 1e-5:
            print("Gradient check failed.")
            print("First gradient error found at index %s" % str(ix))
            print("Your gradient: %f \t Numerical gradient: %f" % (
                grad[ix], numgrad))
            return

        it.iternext() # Step to next dimension

    print("Gradient check passed!")
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号