最后,经过几个小时的同样问题,我解决了这个问题。
正在发生的事情是这样的: 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
祝你好运!