用于分类的深度信念网络的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示例代码的主要内容,如果未能解决你的问题,请参考以下文章