Neurolab 重新训练网络

Neurolab retrain the network

我正在 python 中使用 neurolab 创建神经网络。我创建了一个 newff 网络并使用默认的 train_bfgs 训练函数。我的问题很多次,训练在 epochs 运行 结束甚至达到错误目标之前就结束了。我环顾四周,在 neurolabs github 页面上找到了一个 post,他们在其中解释了为什么会发生这种情况。我的问题是,如果我重新 运行 程序几次,它就会流行起来,训练开始,然后错误也会下降(可能一些随机起始权重比其他权重好很多)。我想做的是在训练中进行一种检查,这样如果错误太高并且它训练的时期甚至不接近总数然后重新训练网络(有点像重新 运行ning程序)(可能会重置网络默认权重)

这是我写的,但显然它不起作用

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(),但是接下来,没有正在进行的训练,这变成了无限循环。 知道我错过了什么吗?

谢谢

所以, 由于这几天没有得到答复,我认为这对 SO 来说真的很糟糕,所以我自己找到了一个工作 work-around。我厌倦了使用 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;
.
.

希望对某些人有所帮助