Neurolab重新训练网络

cod*_*her 5 python machine-learning neural-network

neurolab在python中使用创建一个神经网络.我创建了一个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
Run Code Online (Sandbox Code Playgroud)

正在发生的事情是,当它通过第一个条件,即训练时期太少时,它会net.reset()在重新启动之前执行,但接着,没有正在进行的训练,这就变成了无限循环.知道我错过了什么吗?

谢谢

cod*_*her 1

所以,由于这个问题几天来都没有得到答复,而且我认为这对 SO 来说真的很糟糕,所以我自行寻找一个可行的解决方法。我厌倦了使用 重新启动脚本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
Run Code Online (Sandbox Code Playgroud)

它很老套,但有点管用:

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;
.
.
Run Code Online (Sandbox Code Playgroud)

希望对某人有所帮助