用于分类的深度信念网络的Matlab示例代码

Posted

技术标签:

【中文标题】用于分类的深度信念网络的Matlab示例代码【英文标题】:Matlab example code for deep belief network for classification 【发布时间】:2015-08-29 09:15:32 【问题描述】:

我有一个包含 40 个特征向量的数据集,分为 4 个类别。有人可以在 Matlab 中给出一个示例代码如何应用深度信念网络进行分类(并解释参数)吗?可以使用任意库/tooblox,但必须在 Matlab 中。

例如 shogun 工具箱 (http://www.shogun-toolbox.org/)、DeeBNet 工具箱 (http://ceit.aut.ac.ir/~keyvanrad/DeeBNet%20Toolbox.html) 或深度学习工具箱 (http://www.mathworks.com/matlabcentral/fileexchange/38310-deep-learning-toolbox) 但不幸的是,它们都没有很好的文档记录,因为我完全不熟悉深度学习/神经网络对我来说真的很难。

编辑:我应该为以下参数选择什么或应该在什么范围内搜索?

nn.activation_function              = 'tanh_opt';   %  Activation functions of hidden layers: 'sigm' (sigmoid) or 'tanh_opt' (optimal tanh).
nn.learningRate                     = 2;            %  learning rate Note: typically needs to be lower when using 'sigm' activation function and non-normalized inputs.
nn.momentum                         = 0.5;          %  Momentum
nn.scaling_learningRate             = 1;            %  Scaling factor for the learning rate (each epoch)
nn.weightPenaltyL2                  = 0;            %  L2 regularization
nn.nonSparsityPenalty               = 0;            %  Non sparsity penalty
nn.sparsityTarget                   = 0.05;         %  Sparsity target
nn.inputZeroMaskedFraction          = 0;            %  Used for Denoising AutoEncoders
nn.dropoutFraction                  = 0;            %  Dropout level (http://www.cs.toronto.edu/~hinton/absps/dropout.pdf)
nn.testing                          = 0;            %  Internal variable. nntest sets this to one.
nn.output                           = 'sigm';       %  output unit 'sigm' (=logistic), 'softmax' and 'linear'

opts.numepochs =   1;
opts.batchsize = 100;
opts.momentum  =   0;
opts.alpha     =   1;

【问题讨论】:

【参考方案1】:

所以 DBN 相当复杂,我花了几个月的时间才真正理解它们。不过,这里有一个快速概述 -

神经网络的工作原理是具有某种特征并将它们置于“全有或全无激活”层中。这些激活具有权重,这就是 NN 试图“学习”的内容。由于系统无法正确找到这些权重,NNs 在 80 到 90 年代几乎消失了。直到很棒的 2006 paper of Geoff Hinton - 他想用受限的 Boltzman 机器对网络进行预训练,以便在正确的球场上获得权重。

这取决于你的目标,但如果你的目标是了解它们是如何工作的,我会从 Hinton 的原始论文开始,并将其重写为具有函数,而不是论文中的静态 3 层网络。这将使您对正在学习的权重和激活方面的情况有一个很好的直觉。

现在回答你的第二个问题——有一点争论——但根据我的经验,最关键的因素是提出系统架构,这些变量如下:

层数 可见数量 nodes 每层隐藏节点数

您可以控制的其他变量是我将其归类为优化变量的变量。它们是:

激活函数 - tanh、sigmoid、relu 学习变量的学习率

不过,我要警告您,不要期待出色的结果 - 并准备好拥有一个需要很长时间训练的系统。

您可以采用的第二条路线是尝试其他一些系统,例如 Caffe,这可能会为您提供更多可用的结果。

不管怎样,祝你好运:)

ps,对于如此小的数据,您可能会考虑使用 SVM。

【讨论】:

感谢您的回答。您会建议该变量的哪些值?我的目标不是学习它们是如何工作的。我只想在我的数据集上应用一个深度信念网络进行分类。您是否有可能在 Matlab 中提供一些示例代码,以便我了解它是如何完成的?那真的很棒。 老实说,这些是你想要测试的东西。我使用 relu 函数,这些学习率从 0.00001-1 开始,我不记得它们在 tanh 的范围内。但是,这些是优化变量,不应极大地影响结果。正如我之前所说,更重要的是让架构正确——层数和隐藏节点。还可以使用“opts”,将其放入更新的代码中。 numepochs 肯定有超过 1 个。对于批量大小,您的数据小于 100,所以我会将其更改为 1。动量可能应该是 0.001。

以上是关于用于分类的深度信念网络的Matlab示例代码的主要内容,如果未能解决你的问题,请参考以下文章

深度信念网络与卷积神经网络在非图像分类任务上的表现

基于matlab使用机器学习和深度学习进行雷达目标分类

深度学习与图神经网络核心技术实践应用高级研修班-Day1受限波尔兹曼机和深度信念网络

Loopy 信念传播代码示例

深度信念网络与卷积神经网络

深度信念网络