博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深度学习 Deep Learning UFLDL 最新Tutorial 学习笔记 4:Debugging: Gradient Checking
阅读量:4123 次
发布时间:2019-05-25

本文共 1554 字,大约阅读时间需要 5 分钟。

1 Gradient Checking 说明

前面我们已经实现了Linear Regression和Logistic Regression,关键在于代价函数Cost Function和其梯度Gradient的计算。
在Gradient的计算中,我们一般采用推导出来的计算公式来进行计算。
但是我们看到,推导出来的公式是复杂的,特别到后面的神经网络,更加复杂。这就产生了一个问题,我们如何判断我们编写的程序就是计算出正确的Gradient呢?
解决办法就是通过数值计算的方法来估算Gradient然后与用公式计算出来的数据做对比,如果差距很小,那么就说明我们的计算是对的。
那么采用什么数值计算方法呢?
其实就是基于最基本的求导公式:
ddθJ(θ)=limϵ0J(θ+ϵ)J(θϵ)2ϵ.
我们取epsilon一个很小的值,那么得到的数据就是导数的近似。
因此
g(θ)J(θ+EPSILON)J(θEPSILON)2×EPSILON.

2 代码实现

这里我们不需要自己Code,官方已经给出了代码,我们只需要分析一下:
这个代码用来计算gradient平均误差
% 说明:grad_check 参数% fun为函数% num_checks 检查次数% varagin为参数列 var1,var2,var3...这个varagin必须放在function最后一个项function average_error = grad_check(fun, theta0, num_checks, varargin)  delta=1e-3;   sum_error=0;  fprintf(' Iter       i             err');  fprintf('           g_est               g               f\n')  for i=1:num_checks    T = theta0;    j = randsample(numel(T),1);    T0=T; T0(j) = T0(j)-delta;    T1=T; T1(j) = T1(j)+delta;    [f,g] = fun(T, varargin{:}); %由于fun是linear_regression或logistic_regression    f0 = fun(T0, varargin{:});   %所以这里的varagin{:}参数为train.X,train.y     f1 = fun(T1, varargin{:});    g_est = (f1-f0) / (2*delta);    error = abs(g(j) - g_est);    fprintf('% 5d  % 6d % 15g % 15f % 15f % 15f\n', ...            i,j,error,g(j),g_est,f);    sum_error = sum_error + error;  end  average_error =sum_error/num_checks;
那么在使用中,比如在ex1a_linreg.m中,可以这样使用:
% Gradient Checkaverage_error = grad_check(@linear_regression_vec,theta,50,train.X,train.y);fprintf('Average error :%f\n',average_error);
【本文为原创文章,转载请注明出处:blog.csdn.net/songrotek  欢迎交流哦QQ:363523441】
你可能感兴趣的文章
微服务的注册与发现
查看>>
bash: service: command not found
查看>>
linux Crontab 使用 --定时任务
查看>>
shell编程----目录操作(文件夹)
查看>>
机器学习-----K近邻算法
查看>>
HBASE安装和简单测试
查看>>
关于程序员的59条搞笑但却真实无比的编程语录
查看>>
搞笑--一篇有趣的文章编译自一篇西班牙博客。有一位美丽的公主,被关押在一个城堡中最高的塔上,一条凶恶的巨龙看守着她,需要有一位勇士营救她…
查看>>
非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)
查看>>
Tomcat启动错误,端口占用
查看>>
laravel 修改api返回默认的异常处理
查看>>
高德坐标转换百度坐标 javascript
查看>>
tp5封装通用的修改某列值
查看>>
laravel控制器与模型名称不统一
查看>>
vue登录拦截
查看>>
npm配置淘宝镜像仓库以及electron镜像
查看>>
linux设置开机自启动脚本的最佳方式
查看>>
VUE SPA 单页面应用 微信oauth网页授权
查看>>
phpstorm 集成 xdebug 进行调试
查看>>
npm和node升级的正确方式
查看>>