本文是吴恩达《深度学习》L2W1的编程作业2。
本文是跟着参考资料的步骤过了一遍作业,做到加深理解的目的,其中所有需要下载的资料都在第二条参考资料里面。
我的实验环境是天池的NoteBook
总任务
- 初始化参数,详见上篇《深度学习 | 初始化参数 实践练习》
1.1 使用0来初始化参数
1.2 使用随机数来初始化参数
1.3 使用抑梯度异常(如梯度消失和梯度爆炸)初始化参数 - 正则化模型,详见上篇《深度学习 | 正则化 实践练习》
2.1 使用二范数对二分类模型正则化,尝试避免过拟合
2.2 使用随机删除节点方法精简模型,尝试避免过拟合 - 梯度校验
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−
- 首先使用以下式子和 ε ε ε的极小值计算gradapprox,5步为: