我在用
net = newfit(in,out,lag(j),{'tansig','tansig'}); 生成一个新的神经网络。 validation checks次数的默认值为6 。
我正在训练很多网络,这需要很多时间。我想我的结果是否可以准确地提高一点,这并不重要。
我怎样才能更快地训练?
- 我相信一种方法可能是减少验证检查次数的价值。我该怎么做(在代码中,不使用GUI)
- 还有其他提高速度的方法。
正如我所说,速度的提高可能会稍微降低精度。
回答:
根据
文档 ,仅是扩展
@mtrw答案,当发生以下任何一种情况时,培训就会停止:
- 到达时期的最大数量: 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通常用于避免过度拟合,而不是为了加速。
我的建议是,将
时间和
纪元设置为您的应用程序限制所允许的最大可能
时间 (否则结果将很差)。然后,您可以控制
目标和
min_grad以达到所需的速度/精度权衡。请记住,
max_fails不会使您
有所收获,因为它主要用于确保良好的泛化能力。
更多&回答...