深度学习 | 梯度检验 实践练习

本文是吴恩达《深度学习》L2W1的编程作业2。

本文是跟着参考资料的步骤过了一遍作业,做到加深理解的目的,其中所有需要下载的资料都在第二条参考资料里面。

我的实验环境是天池的NoteBook


总任务

  1. 初始化参数,详见上篇《深度学习 | 初始化参数 实践练习》
    1.1 使用0来初始化参数
    1.2 使用随机数来初始化参数
    1.3 使用抑梯度异常(如梯度消失和梯度爆炸)初始化参数
  2. 正则化模型,详见上篇《深度学习 | 正则化 实践练习》
    2.1 使用二范数对二分类模型正则化,尝试避免过拟合
    2.2 使用随机删除节点方法精简模型,尝试避免过拟合
  3. 梯度校验
    3.1 对模型使用梯度校验,检测它是否在梯度下降的过程中出现了误差过大的情况。

3 梯度校验

3.1 梯度校验原理
  • 使用正向传播和损失函数来计算 J J J
  • 导数(梯度)的定义:
    在这里插入图片描述
  • 一维线性模型梯度检查计算过程:
    在这里插入图片描述
  • 导入包和数据集
import numpy as np
import matplotlib.pyplot as plt
import sklearn
import sklearn.datasets
import init_utils #初始化
import reg_utils #正则化
import gc_utils#梯度校验
  • 测试一下一维线性模型的正向/反向传播
def forward_propagation(x,theta):
    """
    
    实现图中呈现的线性前向传播(计算J)(J(theta)= theta * x)
    
    参数:
    x  - 一个实值输入
    theta  - 参数,也是一个实数
    
    返回:
    J  - 函数J的值,用公式J(theta)= theta * x计算
    """
    J = np.dot(theta,x)
    
    return J

#测试forward_propagation
print("-----------------测试forward_propagation-----------------")
x, theta = 2, 4
J = forward_propagation(x, theta)
print ("J = " + str(J))

def backward_propagation(x,theta):
    """
    计算J相对于θ的导数。
    
    参数:
        x  - 一个实值输入
        theta  - 参数,也是一个实数
    
    返回:
        dtheta  - 相对于θ的成本梯度
    """
    dtheta = x
    
    return dtheta

#测试backward_propagation
print("-----------------测试backward_propagation-----------------")
x, theta = 2, 4
dtheta = backward_propagation(x, theta)
print ("dtheta = " + str(dtheta))

在这里插入图片描述

3.2 一维梯度检验
  • 为了展示backward_propagation()函数正确计算了梯度,让我们实施梯度检验。步骤如下:
    • 首先使用以下式子和 ε ε ε的极小值计算gradapprox,5步为:
      在这里插入图片描述在这里插入图片描述
    • 然后使用反向传播计算梯度,并将结果存储在变量“grad”中
    • 最后,使用以下公式计算“gradapprox”和“grad”之间的相对差:当difference小于 1 0 − 7 10^{-7} 10
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值