如何在MATLAB中更改newfit()的默认参数?

时间:2009-11-14 18:23:25

标签: matlab performance machine-learning neural-network

我正在使用

net = newfit(in,out,lag(j),{'tansig','tansig'});

生成一个新的神经网络。 validation checks的默认值为6

我正在训练很多网络,这需要花费很多时间。我想如果我的结果可以提高得多,那么我的结果就不那么准确了。< / p>

我如何更快地训练?

  • 我认为其中一种方法可能是减少验证检查次数的价值。我怎么能这样做(在代码中,而不是使用GUI)
  • 还有其他方法可以提高速度。

正如我所说,速度的提高可能会略微降低准确性。

3 个答案:

答案 0 :(得分:5)

只是为了延长@mtrw答案,根据documentation,当出现任何这些情况时,训练停止:

  • 已达到纪元的最大数量:net.trainParam.epochs
  • 超出了时间的最大值:net.trainParam.time
  • 效果最小化为目标net.trainParam.goal
  • 效果渐变低于 min_grad net.trainParam.min_grad
  • mu超过 mu_max net.trainParam.mu_max
  • 自此以后,验证效果增加超过 max_fail 次   它最后一次减少(使用验证时):net.trainParam.max_fail

时代时间约束允许在训练持续时间上设置上限。

目标约束在性能(错误)低于它时停止训练,并且通常允许您调整时间/准确度权衡级别:不太准确的结果以加快执行速度。

这类似于 min_grad (渐变告诉你“下降”的强度),如果渐变的幅度小于mingrad,训练就会停止。可以理解的是,如果误差函数变化不大,那么我们就会达到一个平台,我们应该停止训练,因为我们不会有太大的改进。

mu mu_dec mu_max 用于控制权重更新过程(反向传播)。

max_fail 通常用于避免过度拟合,而不是用于加速。

我的建议是,将时间 epochs 设置为应用程序约束允许的最大值(否则结果会很差)。反过来,您可以控制目标 min_grad 以达到所需的速度/准确性权衡级别。请记住, max_fails 不会让你获得任何时间,因为它主要用于确保良好的泛化能力。

答案 1 :(得分:1)

(免责声明:我没有神经网络工具箱,所以我只是从Mathworks文档中推断出来)

从您输入的参数中查看,例如您正在使用TRAINLM。根据文档,您可以设置net.trainParam.max_fail参数以更改验证检查。

您可以设置初始mu值,以及增量和减量因子。但这需要对搜索的预期答案和性能有所了解。

对于更直接的方法,您还可以通过将net.trainParam.epochs参数设置为小于其默认值100的值来控制最大迭代次数。您还可以设置net.trainParam.time参数来限制数量几秒钟。

您应该将net.trainParam.show设置为NaN以跳过任何显示。

答案 2 :(得分:0)

神经网络在MATLAB中被视为对象。要在培训之前(或之后)访问任何参数,您需要使用.运算符访问网络的属性。

除了mtrw和Amro的答案之外,让MATLAB的神经网络工具箱文档成为您最好的朋友。它通常会更详细地解释事情。