为了账号安全,请及时绑定邮箱和手机立即绑定

Implement gradient_check_n()运算结果和预期不一样

Implement gradient_check_n()运算结果和预期不一样

无无法师 2017-09-14 08:22:01
# GRADED FUNCTION: gradient_check_n def gradient_check_n(parameters, gradients, X, Y, epsilon = 1e-7):     """     Checks if backward_propagation_n computes correctly the gradient of the cost output by forward_propagation_n          Arguments:     parameters -- python dictionary containing your parameters "W1", "b1", "W2", "b2", "W3", "b3":     grad -- output of backward_propagation_n, contains gradients of the cost with respect to the parameters.      x -- input datapoint, of shape (input size, 1)     y -- true "label"     epsilon -- tiny shift to the input to compute approximated gradient with formula(1)          Returns:     difference -- difference (2) between the approximated gradient and the backward propagation gradient     """          # Set-up variables     parameters_values, _ = dictionary_to_vector(parameters)     grad = gradients_to_vector(gradients)     num_parameters = parameters_values.shape[0]     J_plus = np.zeros((num_parameters, 1))     J_minus = np.zeros((num_parameters, 1))     gradapprox = np.zeros((num_parameters, 1))          # Compute gradapprox     for i in range(num_parameters):                  # Compute J_plus[i]. Inputs: "parameters_values, epsilon". Output = "J_plus[i]".         # "_" is used because the function you have to outputs two parameters but we only care about the first one         ### START CODE HERE ### (approx. 3 lines)         thetaplus = np.copy(parameters_values)                                    # Step 1         thetaplus[i][0] = thetaplus[i][0]+epsilon                               # Step 2         J_plus[i], _ = forward_propagation_n(X,Y,vector_to_dictionary(thetaplus))                                  # Step 3         ### END CODE HERE ###                  # Compute J_minus[i]. Inputs: "parameters_values, epsilon". Output = "J_minus[i]".         ### START CODE HERE ### (approx. 3 lines)         thetaminus = np.copy(parameters_values)                                     # Step 1         thetaminus[i][0] = thetaplus[i][0]-epsilon                                # Step 2                 J_minus[i], _ = forward_propagation_n(X,Y,vector_to_dictionary(thetaminus))                                  # Step 3         ### END CODE HERE ###                  # Compute gradapprox[i]         ### START CODE HERE ### (approx. 1 line)         gradapprox[i] = (J_plus[i]-J_minus[i])/(2*epsilon)         ### END CODE HERE ###          # Compare gradapprox to backward propagation gradients by computing difference.     ### START CODE HERE ### (approx. 1 line)     numerator = np.linalg.norm(gradapprox-grad)                                           # Step 1'     denominator = np.linalg.norm(grad)+np.linalg.norm(gradapprox)                                         # Step 2'     difference = numerator/denominator                                          # Step 3'     ### END CODE HERE ###     if difference > 1e-7:         print ("\033[93m" + "There is a mistake in the backward propagation! difference = " + str(difference) + "\033[0m")     else:         print ("\033[92m" + "Your backward propagation works perfectly fine! difference = " + str(difference) + "\033[0m")          return difference
查看完整描述

1 回答

?
慕移动1217771

TA贡献1条经验 获得超0个赞

你好,还在么,想问一下问题解决了吗,刚学到这,结果和你一样,怎么找都没找到问题所在

查看完整回答
反对 回复 2019-02-05
  • 1 回答
  • 0 关注
  • 2488 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信