MATLAB深度学习 : 一般深度学习MATLAB代码解析
来源:互联网 发布:淘宝价格旁已验证正品 编辑:程序博客网 时间:2024/05/23 15:24
深度学习系列(五):一个简单深度学习工具箱原创
首先介绍下一般网络的建立模型,找到在工具箱
DeepLearnToolbox\tests\test_example_NN.m文件,这个测试函数是测试一般的网络模型,取前一段代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
使用到的是手写体数据库,该数据库已经集成到工具箱了,直接用就好,显示看一看该数据库的一部分,其目标就是通过训练该数据库达到识别的目的:
紧接着是对该数据库数据进行归一化等等预处理。nnsetup建立一个网络,里面会有许多参数初始化,同时在设置下opts.numepochs = 1; 该参数个人感觉就是将所有数据重复试验次数,设置1就是实验一次。opts.batchsize = 100;该参数是将大量样本每随机100个作为一波送进去实验。再就是训练测试了。Ok来看看nnsetup:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
这个函数理解起来很简单,初始化网络,网络需要什么初始化什么,一大堆初始化是适应所有的网络的(cnn,dbn等等),有些用到了再说吧,现在你只需要知道网络的结构,以及与稀疏编码表示有关的参数: nn.nonSparsityPenalty ,nn.sparsityTarget,这也就是上节说到的,为什么稀疏表示,具体怎么样不用管,实际使用的时候只是这么几个参数设置,其他的交给程序吧。再有就是注意下激活函数 nn.activation_function。,然后网络权值随机初始化。
紧接着是nntrain了,关于这部分,前面说的那个博主介绍的很好,里面注释也多,可以去看看(看完回来哦):
http://blog.csdn.net/dark_scope/article/details/9421061
这里再说下这个函数整体:[nn, L] = nntrain(nn, train_x, train_y, opts);
可以看到nntrain需要的是设计的网络nn,训练数据train_x,训练对应的目标值train_y,以及附加参数opts。附加参数包括:重复训练次数opts.numepochs,训练数据每一块大小opts.batchsize等等。函数出来的就是训练好的网络nn,这个很重要,训练好的nn为结构体,里面包括你所需要的所有信息,比如说每一层网络的权值系数,训练误差,等等都可以找到,并且在nntest也是用这个训练好的nn。nntrain的具体实现细节见上面那个博客的介绍吧。
nntrain
setup大概就这样一个过程,下面就到了train了,打开\NN\nntrain.m
我们跳过那些检验传入数据是否正确的代码,直接到关键的部分
denoising 的部分请参考论文:Extracting and Composing Robust Features with Denoising Autoencoders
下面分析三个函数nnff,nnbp和nnapplygrads
nnff
nnff就是进行feedforward pass,其实非常简单,就是整个网络正向跑一次就可以了
当然其中有dropout和sparsity的计算
具体的参见论文“Improving Neural Networks with Dropout“和Autoencoders and Sparsity
nnbp
代码:\NN\nnbp.m
nnbp呢是进行back propagation的过程,过程还是比较中规中矩,和ufldl中的Neural Network讲的基本一致
值得注意的还是dropout和sparsity的部分
这只是实现的内容,代码中的d{i}就是这一层的delta值,在ufldl中有讲的dW{i}基本就是计算的gradient了,只是后面还要加入一些东西,进行一些修改
具体原理参见论文“Improving Neural Networks with Dropout“ 以及 Autoencoders and Sparsity的内容
nnapplygrads
代码文件:\NN\nnapplygrads.m
这个内容就简单了,nn.weightPenaltyL2 是weight decay的部分,也是nnsetup时可以设置的一个参数
有的话就加入weight Penalty,防止过拟合,然后再根据momentum的大小调整一下,最后改变nn.W{i}即可
nntest
Ok再来看看nntest,如下:
- 1
- 2
- 3
- 4
- 5
- 6
调用一下nnpredict。函数需要的就是测试数据x和标签y,如果有y的话那么可以计算准确率,如果没有y的话那么你可以自己直接调用 labels = nnpredict(nn, x)可以得到预测的标签。
nnpredict
代码文件:\NN\nnpredict.m
继续非常简单,predict不过是nnff一次,得到最后的output~~
max(nn.a{end},[],2); 是返回每一行的最大值以及所在的列数,所以labels返回的就是标号啦
(这个test好像是专门用来test 分类问题的,我们知道nnff得到最后的值即可)
总结
Ok这就是一个简单的一般化的神经网络了,和我们第三节的matlab自带的神经网络工具箱实现的功能差不多。然而复杂的带稀疏自编码的深度学习网络,自带的就不行了。下一节再来看看同过该工具箱建立稀疏自编码的网络。
- MATLAB深度学习 : 一般深度学习MATLAB代码解析
- matlab:深度学习CNN matlab代码解析
- 深度学习 面向代码 matlab
- matlab 深度学习
- 深度学习Matlab工具箱代码详解
- 深度学习Matlab工具箱代码注释
- 深度学习Matlab工具箱代码详解
- 深度学习Matlab工具箱代码详解
- 深度学习Matlab源码推荐
- 深度学习的matlab工具箱
- 深度学习Matlab工具箱代码注释——MnistTest.m
- 深度学习Matlab工具箱代码注释——cnnsetup.m
- 深度学习Matlab工具箱代码注释——cnntrain.m
- 深度学习Matlab工具箱代码注释——cnnff.m
- 深度学习Matlab工具箱代码注释——cnnbp.m
- 深度学习Matlab工具箱代码注释——cnnapplygrads.m
- MATLAB深度学习代码详细分析(一)__nnff.m
- MATLAB上用十一行代码实现深度学习…
- 新零售的新思路:如何管理复杂?
- SpringCloud分布式开发五大神兽(一)
- Go语言开发环境搭建
- 观宋宝华设备树视频的感想
- 对于中断的理解
- MATLAB深度学习 : 一般深度学习MATLAB代码解析
- 作为产品运营,如何培养自己的用户思维?
- 中小企业搭上了虚拟化发展的“快车”
- 深度:一套系统从无到有的设计
- springboot 打war包去掉项目前缀会 启动两次解决
- 安卓开发 As插件解放双手
- FormData Ajax上传文件详细教程
- Spring注解@ResponseBody中文乱码
- 如何在本机编译openthos5.1环境,适用于Ubuntu16.04