深度信念网络DBN的一个matlab实例「建议收藏」

关于深度学习的一些个人浅见:   深度学习通常是训练深度(多层)神经网络,用于模式识别(如语音、图像识别);深度网络指是具有深层(多层)网络结构的神经网络。   深层网络由于神经元多,参数多,拟合表现能力强,有表现欲解决复杂问题的能力。   但是深度网络存在很多局部最优解,深度网络的训练容易停留在局部最优上,初始参数的选择对网络最终收敛在那个位置有很大的影响。

大家好,又见面了,我是你们的朋友全栈君。

关于深度学习的一些个人浅见:

     深度学习通常是训练深度(多层)神经网络,用于模式识别(如语音、图像识别);深度网络 指是具有深层(多层)网络结构的神经网络。

     深层网络由于神经元多,参数多,拟合表现能力强,有表现欲解决复杂问题的能力。

     但是深度网络存在很多局部最优解,深度网络的训练容易停留在局部最优上,初始参数的选择对网络最终收敛在那个位置有很大的影响。

     采用限制玻尔兹曼机RBM对深度网络做逐层无监督训练,将各单层训练得到的参数作为深度网络各层神经元的初始参数,该参数是深度网络参数空间的一个较好位置(容易)。

     RBM逐层训练出深度网络参数初值后,在用传统的BP算法对深度网络进行训练,如此,深度网络的参数最终将收敛在一个好的位置。

     RBM通过迭代大量数据的无监督训练,把能够提炼出训练数据的较本质的特征,这被认为是好的初始参数。

本例子为matlab编写,为用数字识别训练一个手写数字识别的深度神经网络。

另外需要DBN的支持代码,可以从这里下载:http://download.csdn.net/detail/hzq20081121107/7857735,http://pan.baidu.com/s/1c0fBQsK

网络结构采用 784,400,200,100,50,20,10的网络结构。

function aGetDeepNet()
clc
clear all
%得到训练数据
load('adata.mat','train_digitdata','train_targets');
X = train_digitdata;
Y = train_targets;
%输入数据初始化
Xmin = min(X);
Xmax = max(X);
X = bsxfun(@rdivide,bsxfun(@minus,X,Xmin),(Xmax-Xmin));

%RBM训练得到第一隐层的网络参数,rbm输入为图片数据
rbm1 = rbm([784,400]);
rbm1 = checkrbmtrain(@rbmtrain1,rbm1,X,50,0.1);
net_rbm1 = rbm2nnet(rbm1,'up');
h1 = nnetfw(net_rbm1,X);

%RBM训练得到第二隐层的网络参数,输入为第一隐层的输出
rbm2 = rbm([400,200]);
rbm2 = checkrbmtrain(@rbmtrain1,rbm2,h1,50,0.1);
net_rbm2 = rbm2nnet(rbm2,'up');
h2 = nnetfw(net_rbm2,h1);

%RBM训练得到第三隐层的网络参数,输入为第二隐层的输出
rbm3 = rbm([200,100]);
rbm3 = checkrbmtrain(@rbmtrain1,rbm3,h2,50,0.1);
net_rbm3 = rbm2nnet(rbm3,'up');
h3 = nnetfw(net_rbm3,h2);

%RBM训练得到第四隐层的网络参数,输入为第三隐层的输出
rbm4 = rbm([100,50]);
rbm4 = checkrbmtrain(@rbmtrain1,rbm4,h3,50,0.1);
net_rbm4 = rbm2nnet(rbm4,'up');
h4 = nnetfw(net_rbm4,h3);

%RBM训练得到第五隐层的网络参数,输入为第四隐层的输出
rbm5 = rbm([50,20]);
rbm5 = checkrbmtrain(@rbmtrain1,rbm5,h4,50,0.1);
net_rbm5 = rbm2nnet(rbm5,'up');
h5 = nnetfw(net_rbm5,h4);

%构建深度网络,并初始化参数为rbm训练出的参数。
net1 = nnet([784,400,200,100,50,20,10],'softmax');
net1.w{1} = net_rbm1.w{1};
net1.w{2} = net_rbm2.w{1};
net1.w{3} = net_rbm3.w{1};
net1.w{4} = net_rbm4.w{1};
net1.w{5} = net_rbm5.w{1};

%对深度网络进行BP训练
net2 = nnettrain(net1,X,Y,1000);

%用训练好的深度网络net2分类识别
y = nnetfw(net2,X);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128693.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 52激活成功教程游戏论坛_激活成功教程版吾爱

    52激活成功教程游戏论坛_激活成功教程版吾爱2019.6.6号,当小编打开吾爱激活成功教程论坛的时候,发现网站已经不能打开,出现一个公告:吾爱激活成功教程一直致力于软件安全技术交流,作为一个尊重原创、重视版权的论坛,为了顺应新时代版权的发展,加强版权保护的力度

    2022年8月2日
    3
  • ISDN实验基本配置

    ISDN实验基本配置

    2021年7月28日
    59
  • PyCharm如何删除工程项目

    PyCharm如何删除工程项目1、在菜单中选择:file——>closeproject2、选择需要删除的项目右上角的“×”号进行删除工程项目3、找到工程项目的存放路径,删除对应的工程项目文件通过上诉操作即可在pycharm中删除工程文件。转载于:https://www.cnblogs.com/benpao1314/p/9679508.html…

    2022年8月26日
    5
  • C语言练习7—一维数组删除指定位置元素

    C语言练习7—一维数组删除指定位置元素题目在一维数组删除指定位置元素,现定义第一个元素位置为1,一维数组元素个数不确定,需要动态输入,并返回删除元素后的数组以及被删除的元素。例如输入数组个数为n=4;将要删除的数组元素位置是2;在这里插入代码片…

    2022年8月11日
    0
  • cglib动态代理实现原理_java设计模式之代理模式

    cglib动态代理实现原理_java设计模式之代理模式代理模式(ProxyPattern)是一种结构性模式。代理模式为一个对象提供了一个替身,以控制对这个对象的访问。即通过代理对象访问目标目标对象,可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。文章目录代理模式静态代理动态代理cglib代理应用

    2022年10月16日
    0
  • linux smartctl 命令,使用smartctl命令检查磁盘

    linux smartctl 命令,使用smartctl命令检查磁盘使用smartctl命令检查磁盘在TS过程中会碰到很多磁盘异常出现影响系统数据或者生产数据的情况,但是有时候无法判断磁盘出现问题是由于磁盘物理损坏还是磁盘SATA口接触不良导致,这个时候smartctl命令就可以很容易判断出磁盘是否存在物理损坏问题,并且及时作出预警。使用smartctl进行SMART测试所有现代硬盘都可通过SMART属性监视其当前状态。这些值提供有关硬盘各种参数的信息,并可提供有…

    2022年6月16日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号