图书馆 neurolab 训练 newff
Library neurolab training newff
我在使用 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 运行s fmin_bfgs 来自 scipy.optimize。作为参数,给出了一个函数 epochf。在训练网络时,每次迭代后此函数必须 运行,以便 neurolab 正确退出。遗憾的是,fmin_bfgs 在 "optimization terminated successfully" 时无法执行此操作(可以将 self.kwargs['disp'] = 1 从 /neurolab/train/spo.py 传递到 fmin_bfgs请参阅 scipy 的输出)。我没有进一步调查为什么 fmin_bfgs returns "optimization terminated successfully" 但它与错误收敛有关。
我已经尝试 python 2.7 和 python 3 scipy 版本 12.0 到 0.15 而没有这种行为改变(如 this suggested)。
我的解决方案是简单地从 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
中描述
祝你好运!
我在使用 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 运行s fmin_bfgs 来自 scipy.optimize。作为参数,给出了一个函数 epochf。在训练网络时,每次迭代后此函数必须 运行,以便 neurolab 正确退出。遗憾的是,fmin_bfgs 在 "optimization terminated successfully" 时无法执行此操作(可以将 self.kwargs['disp'] = 1 从 /neurolab/train/spo.py 传递到 fmin_bfgs请参阅 scipy 的输出)。我没有进一步调查为什么 fmin_bfgs returns "optimization terminated successfully" 但它与错误收敛有关。
我已经尝试 python 2.7 和 python 3 scipy 版本 12.0 到 0.15 而没有这种行为改变(如 this suggested)。
我的解决方案是简单地从 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
中描述祝你好运!