function cnnnumgradcheck(net, x, y)
epsilon = 1e-4;
er = 1e-8;
n = numel(net.layers);
for j = 1 : numel(net.ffb)
net_m = net; net_p = net;
net_p.ffb(j) = net_m.ffb(j) + epsilon;
net_m.ffb(j) = net_m.ffb(j) - epsilon;
net_m = cnnff(net_m, x); net_m = cnnbp(net_m, y);
net_p = cnnff(net_p, x); net_p = cnnbp(net_p, y);
d = (net_p.L - net_m.L) / (2 * epsilon);
e = abs(d - net.dffb(j));
if e > er
error('numerical gradient checking failed');
end
end
for i = 1 : size(net.ffW, 1)
for u = 1 : size(net.ffW, 2)
net_m = net; net_p = net;
net_p.ffW(i, u) = net_m.ffW(i, u) + epsilon;
net_m.ffW(i, u) = net_m.ffW(i, u) - epsilon;
net_m = cnnff(net_m, x); net_m = cnnbp(net_m, y);
net_p = cnnff(net_p, x); net_p = cnnbp(net_p, y);
d = (net_p.L - net_m.L) / (2 * epsilon);
e = abs(d - net.dffW(i, u));
if e > er
error('numerical gradient checking failed');
end
end
end
for l = n : -1 : 2
if strcmp(net.layers{l}.type, 'c')
for j = 1 : numel(net.layers{l}.a)
net_m = net; net_p = net;
net_p.layers{l}.b{j} = net_m.layers{l}.b{j} + epsilon;
net_m.layers{l}.b{j} = net_m.layers{l}.b{j} - epsilon;
net_m = cnnff(net_m, x); net_m = cnnbp(net_m, y);
net_p = cnnff(net_p, x); net_p = cnnbp(net_p, y);
d = (net_p.L - net_m.L) / (2 * epsilon);
e = abs(d - net.layers{l}.db{j});
if e > er
error('numerical gradient checking failed');
end
for i = 1 : numel(net.layers{l - 1}.a)
for u = 1 : size(net.layers{l}.k{i}{j}, 1)
for v = 1 : size(net.layers{l}.k{i}{j}, 2)
net_m = net; net_p = net;
net_p.layers{l}.k{i}{j}(u, v) = net_p.layers{l}.k{i}{j}(u, v) + epsilon;
net_m.layers{l}.k{i}{j}(u, v) = net_m.layers{l}.k{i}{j}(u, v) - epsilon;
net_m = cnnff(net_m, x); net_m = cnnbp(net_m, y);
net_p = cnnff(net_p, x); net_p = cnnbp(net_p, y);
d = (net_p.L - net_m.L) / (2 * epsilon);
e = abs(d - net.layers{l}.dk{i}{j}(u, v));
if e > er
error('numerical gradient checking failed');
end
end
end
end
end
elseif strcmp(net.layers{l}.type, 's')
% for j = 1 : numel(net.layers{l}.a)
% net_m = net; net_p = net;
% net_p.layers{l}.b{j} = net_m.layers{l}.b{j} + epsilon;
% net_m.layers{l}.b{j} = net_m.layers{l}.b{j} - epsilon;
% net_m = cnnff(net_m, x); net_m = cnnbp(net_m, y);
% net_p = cnnff(net_p, x); net_p = cnnbp(net_p, y);
% d = (net_p.L - net_m.L) / (2 * epsilon);
% e = abs(d - net.layers{l}.db{j});
% if e > er
% error('numerical gradient checking failed');
% end
% end
end
end
% keyboard
end
没有合适的资源?快使用搜索试试~ 我知道了~
CNN学习代码(Matlab版本)
共31个文件
m:30个
mat:1个
3星 · 超过75%的资源 需积分: 45 282 下载量 162 浏览量
2017-04-29
11:58:38
上传
评论 18
收藏 14.04MB ZIP 举报
温馨提示
单步运行run_cnn_example.m 理解神经网络学习过程中的训练与测试过程,尤其是cnnTrain.m中的前向、后向传播函数与权值更新函数。注意:将压缩包在matlab的工作路径下解压,然后运行run_cnn_example.m即可。
资源推荐
资源详情
资源评论
收起资源包目录
code.zip (31个子文件)
cnnnumgradcheck.m 3KB
cnnsetup.m 2KB
run_cnn_example.m 1KB
cnnff.m 2KB
mnist_uint8.mat 14.05MB
cnntrain.m 780B
cnnapplygrads.m 575B
cnnbp.m 2KB
cnntest.m 193B
util
softmax.m 256B
im2patches.m 313B
patches2im.m 242B
makeLMfilters.m 2KB
expand.m 2KB
flicker.m 208B
whiten.m 183B
visualize.m 1KB
randp.m 2KB
fliplrf.m 543B
tanh_opt.m 54B
allcomb.m 3KB
normalize.m 97B
randcorr.m 283B
myOctaveVersion.m 169B
isOctave.m 108B
sigm.m 48B
rnd.m 49B
zscore.m 137B
flipall.m 80B
flipudf.m 576B
sigmrnd.m 126B
共 31 条
- 1
资源评论
- 什么是泛函?2021-03-12还可以 。。。。。。
- Relax19222020-04-17课堂的源码传上来有意思吗?况且还没用
- weixin_443107492019-12-07没看见解析阿 没有解析 就一个源代码
- fuyanghuzui2019-05-27里面的内容还是很详尽的,可以运行的出来的。
- wenzi_wxing2017-12-06空代码!!!无语。离谱、2018-01-26不知道是你的下载出了问题还是什么原因,我自己又下载看了一下,明明什么都有,你为什么要说是空代码? 空代码会有14MB?
离谱、
- 粉丝: 18
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功