图书馆神经实验室培训纽夫

2024-06-18

我对 python 和 Neurolab 的使用还很陌生,我在前馈神经网络的训练方面遇到了问题。我已经构建了如下网络:

net = nl.net.newff([[-1,1]]*64, [60,1])
net.init()
testerr = net.train(InputT, TargetT, epochs=100, show=1)

我的目标输出是 0 到 4 之间的向量。 当我使用控制台中的 nl.train.train_bfgs 时:

testerr = net.train(InputT, TargetT, epochs=10, show=1)
Epoch: 1; Error: 55670.4462766;
Epoch: 2; Error: 55649.5;

正如你所看到的,我将纪元数固定为 100,但它在第二个纪元处停止,并在网络测试之后停止Netresults=net.sim(InputCross)我有一个向量 1 作为测试输出数组(完全错误)。 如果我使用其他训练函数,我会得到相同的输出测试向量,其中满为 1,但在这种情况下,在训练期间,历元达到我设置的数字,但显示的错误不会改变。 如果目标输出向量在 -1 和 1 之间,则相同。 有什么建议吗? 非常感谢!


最后,经过几个小时的同样问题,我解决了这个问题。

正在发生的事情是这样的: Neurolab 使用 train_bfgs 作为其标准训练算法。 train_bfgs 从 scipy.optimize 运行 fmin_bfgs。给出了一个函数 epochf 作为参数。在训练网络时,必须在每次迭代后运行此函数,以便 Neurolab 正确退出。遗憾的是,当“优化成功终止”时,fmin_bfgs 无法执行此操作(可以将 self.kwargs['disp'] = 1 从 /neurolab/train/spo.py 传递给 fmin_bfgs 以查看 scipy 的输出)。我没有进一步调查为什么 fmin_bfgs 返回“优化成功终止”,但这与错误收敛有关。

我尝试过使用 scipy 版本 12.0 到 0.15 的 python 2.7 和 python 3,但这种行为没有改变(如这建议 https://github.com/scipy/scipy/issues/3581).

我的解决方案是简单地从 train_bfgs 训练切换到常规 train_gd (梯度下降),但我想任何其他训练算法都可以。

net = nl.net.newff(inputNodes, [ hidden, output])

#change traning func
net.trainf = nl.train.train_gd

为了完整性,我测试的代码是:

import neurolab as nl
hidden = 10
output = 1
test = [[0],[0],[0],[1],[1]]
net = nl.net.newff([[0,1]], [ 10, 1])
err = net.train(test, test, epochs = 500, show=1)

该问题只是偶尔出现,因此需要重复测试

编辑:问题也描述于https://github.com/zueve/neurolab/issues/25 https://github.com/zueve/neurolab/issues/25

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图书馆神经实验室培训纽夫 的相关文章

随机推荐