2015-12-28 89 views
5

我在Python中使用neurolab来创建神经网络工具。我创建了一个newff网络,并使用默认的train_bfgs培训功能。我的问题很多时候,在时代耗尽或者甚至达到错误目标之前,培训就结束了。我环顾四周,在neurolabs github页面上发现了一篇文章,他们在那里解释了为什么会发生这种情况。我的问题是,如果我重新运行程序几次,它就会抓住并开始训练,然后错误也会下降(可能一些随机起始权重比其他人好得多)。我想要做的是在训练中加入一种检查,以便如果错误过高并且训练的时间点不够接近总训练时间,则重新训练网络(有点像重新运行程序)(也许重置网络默认权重)Neurolab重新训练网络

这里是我写的,但显然它不工作

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()重新启动之前,但之后,没有正在发生的培训,这成为一个无限循环。 任何想法我失踪?

感谢

回答

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 

它相当哈克但还挺作品:

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; 
. 
. 

希望帮助一些一