最近,我正在尝试使用Matlab内置神经网络工具箱来完成我的分类问题。但是,我对参数设置有一些疑问。
一个。隐藏层中的神经元数量:
此页面上的示例Matlab neural networks classification example显示了一个双层(即一个隐藏层和一个输出层)前馈神经网络。在这个例子中,它使用隐藏层中的10个神经元
net = patternnet(10);
我的第一个问题是如何为我的分类问题定义最佳神经元数量?我应该使用交叉验证方法来使用训练数据集获得最佳执行数量的神经元吗?
湾有没有一种方法可以选择三层或更多层的神经网络?
℃。我们可以在神经网络工具箱中使用许多不同的训练方法。列表可以在Training methods list找到。该页面提到最快的训练功能一般是'trainlm';但是,一般来说哪一个会表现最好?或者它完全取决于我使用的数据集?
d。在每种训练方法中,都有一个名为“epochs”的参数,这是我理解的训练迭代。对于每种训练方法,Matlab定义了训练的最大历元数。但是,从example开始,似乎'epochs'是我们可以调整的另一个参数。我对吗?或者我们只设置最大纪元数或将其保留为默认值?
欢迎使用Matlab神经网络工具箱的任何经验,非常感谢您的回复。 A.
答案 0 :(得分:0)
一个。您可以参考How to choose number of hidden layers and nodes in neural network?和ftp://ftp.sas.com/pub/neural/FAQ3.html#A_hu
当然,您可以进行交叉验证,以确定最佳神经元数量的参数。但不推荐使用它,因为它更适合在某个网络的权重训练阶段使用它。
湾请参阅ftp://ftp.sas.com/pub/neural/FAQ3.html#A_hl
对于更多层的神经网络,你可以参考Deep Learning,这是近年来非常热门的,并且在许多模式识别任务中都获得了最先进的表现。
℃。这取决于您的数据。 trainlm在函数拟合(非线性回归)问题上的表现优于模式识别问题,而训练大型网络和模式识别网络,traincg和trainrp是不错的选择。通常,建议使用梯度下降和弹性反向传播。可以在此处找到更详细的比较:http://www.mathworks.cn/cn/help/nnet/ug/choose-a-multilayer-neural-network-training-function.html
d。你是对的。我们可以调整epochs参数。通常,您可以在每个时期输出识别结果/准确度,您将看到它的推广越来越慢,时间越多,计算时间越长。您可以在准确度和计算时间之间进行折衷。
答案 1 :(得分:0)
对于您的问题的 b 部分: 你可以使用这样的代码:
net = patternnet([10 15 20]);
该脚本创建一个具有3个隐藏层的网络,第一层有10个神经元,第二层有15个神经元,第3层有20个神经元。