【问题标题】:Why newff() does not work properly when I use its arguments!为什么当我使用它的参数时 newff() 不能正常工作!
【发布时间】:2011-08-19 00:02:13
【问题描述】:

我的数据集包括 29 个输入和 6 个输出。当我使用

net = newff(minmax(Pl),[14 12 8 6]); 

构建我的前馈 MLP 网络并通过

对其进行训练
net.trainParam.epochs=50;
net=train(net,Pl,Tl);

网络无法学习我的数据集,并且它的误差不会降低到 0.7 以下,但是当我像这样使用 newff 函数的参数时:

net=newff(minmax(Pl),[14 12 8 6],{'tansig' 'tansig' 'tansig' 'purelin'},'trainlm');

误差下降得非常快,低于 0.0001!不寻常的注意是,当我使用之前的代码时,只使用了一层,包括 2 个神经元:

net=newff(minmax(Pl),[2 6],{'tansig' 'purelin'},'trainlm');

误差再次降至0.2以下,值得怀疑! 请给我一些提示并帮助我了解两者之间的区别:

net = newff(minmax(Pl),[14 12 8 6]);

net=newff(minmax(Pl),[14 12 8 myANN.m],{'tansig' 'tansig' 'tansig' 'purelin'},'trainlm');

?

【问题讨论】:

  • 您使用的是哪个版本的 MATLAB?另外,不要使用太多隐藏层。你需要一个,也许两个。跨多个层的反向传播效果不佳。
  • 您的输入/目标数据的维度是多少?

标签: matlab neural-network


【解决方案1】:

我认为NEWFF的第二个参数(链接需要登录)应该是目标向量,而不是隐藏层的大小(这是第三个参数)。

请注意,隐藏层的默认传递函数为tansig,输出层的默认传递函数为purelin,默认训练算法为trainlm

最后,请记住,如果您想获得可重现的结果,您必须在每次运行开始时手动将随机数生成器重置为固定状态。

【讨论】:

  • 旧版本的newff 使用了他正在使用的调用约定,因此他可能拥有旧版本的 MATLAB。在某些此类版本中,默认培训师是 traingdx 而不是 trainlm,因此指定它可能会产生一些影响。
  • @kwatord:感谢您指出这一点(您知道确切的版本吗?顺便说一句,在最新版本中,newff 完全被弃用了).. 重点是要记住播种随机数如果您想比较训练神经网络的结果,请在每次运行之前以相同的方式生成器。
猜你喜欢
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 2017-08-11
  • 2014-01-31
  • 2019-11-07
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多