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

时间:2015-06-13 12:30:21

标签: matlab machine-learning neural-network classification deep-learning

我有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 个答案:

答案 0 :(得分:2)

所以DBN非常复杂,我花了几个月的时间来真正地围绕它们。这是一个快速概述 -

神经网络通过提供某种功能并通过一层“全部或全部激活”来工作。这些激活具有权重,这就是NN试图“学习”的内容。 NNs在80-90岁时死亡,因为系统无法正确找到这些重量。直到令人敬畏的2006 paper of Geoff Hinton - 他们用限制的boltzman机器预先训练网络,以便在正确的球场中获得重量。

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

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

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

您可以控制的其他变量是我将其归类为优化变量的内容。这些是:

  • 激活功能 - tanh,sigmoid,relu
  • 学习变量的学习率

我会警告你,不要期待一流的结果 - 并准备好一个需要很长时间训练的系统。

你可以去的第二条路线是尝试像Caffe那样的其他系统,这可能会给你更多有用的结果。

无论如何,祝你好运:)

ps,对于这么小的数据,您可以考虑使用SVM。