【深度学习_2.1.3】神经网络之梯度检验

梯度检验用于检验后向传播正常工作

一维数组模型梯度检验

前向传播,计算损失函数:

J = theta * x

后向传播:

dtheta = x

梯度检验:

首先计算gradapprox:

    thetaplus = theta + epsilon                               
    thetaminus = theta - epsilon                              
    J_plus = forward_propagation(x, thetaplus)                                  
    J_minus = forward_propagation(x, thetaminus)                                 
    gradapprox = (J_plus - J_minus)/(2*epsilon)

然后计算grad

   grad = backward_propagation(x, theta)     

计算梯度差:


    numerator = np.linalg.norm(grad - gradapprox)                               
    denominator = np.linalg.norm(grad) + np.linalg.norm(gradapprox)                    
    difference =  numerator/denominator

n维数组模型梯度检验

计算步骤



代码:

thetaplus = np.copy(parameters_values)                                       
        thetaplus[i][0] = thetaplus[i][0] + epsilon                                
        J_plus[i], _ = forward_propagation_n(X, Y, vector_to_dictionary(thetaplus)) 

thetaminus = np.copy(parameters_values)                                     
        thetaminus[i][0] = thetaminus[i][0] - epsilon                                       
        J_minus[i], _ = forward_propagation_n(X, Y, vector_to_dictionary(thetaminus))

gradapprox[i] = (J_plus[i] - J_minus[i])/(2*epsilon)

猜你喜欢

转载自blog.csdn.net/oliverchrist/article/details/79370429