我在python中使用neurolab
来创建神经网络。我创建了一个newff
网络,并使用默认的train_bfgs
培训功能。我的问题很多次,训练只是在时期耗尽或甚至达到错误目标之前结束。我环顾四周,发现了一篇关于neurolabs github页面的帖子,他们在那里解释了为什么会发生这种情况。我的问题是,如果我重新运行程序几次它只是捕获并且训练开始然后错误也会下降(可能一些随机起始权重比其他人好很多)。我想做的是在训练中加入一种检查,这样如果错误太高而且训练的时期甚至不接近总数,那么重新训练网络(有点像重新运行程序)(可能重置)网络默认权重)
这是我写的,但显然它不起作用
trainingComplete = False
while not trainingComplete:
error = net.train(trainingData, TS, epochs=50, show=10, goal=0.001)
if len(error) < 0.8*epochs:
if len(error) > 0 and min(error) < 0.01:
trainingComplete = True
else:
net.reset()
continue
else:
trainingComplete = True
正在发生的事情是,当它通过第一个条件时,即训练时期太少,它会在重新启动之前执行net.reset()
,但接着开启,没有正在进行的训练,这将成为一个无限循环。
知道我错过了什么吗?
由于
答案 0 :(得分:1)
所以,
由于这几天都没有得到回答,我觉得它真的很糟糕,所以我自己动手找工作。我厌倦了使用os.execv(__file__, sys.argv)
重新启动脚本,但是在我的mac上,这总是一个权限问题,加上它太脏了,所以现在就是我现在的工作方式。
# Train network
print('Starting training....')
trainingComplete = False
while not trainingComplete:
error = net.train(trainingData, TS, epochs=epochs, show=10, goal=0.001)
if len(error) < 0.8 * epochs:
if len(error) > 0 and min(error) < 0.01:
trainingComplete = True
else:
print('Restarting....')
net = createNeuralNetwork(trainingData, [hidden], 1)
net.trainf = train_bfgs
else:
trainingComplete = True
它非常hacky但有点工作:
Starting training....
Restarting....
Restarting....
Restarting....
Restarting....
Restarting....
Restarting....
Restarting....
Restarting....
Epoch: 10; Error: 1.46314116045;
Epoch: 20; Error: 0.759613243435;
Epoch: 30; Error: 0.529574731856;
.
.
希望有所帮助