神经再训练

2024-10-02 16:22:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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(),但是之后,没有训练发生,这就变成了一个无限循环。 你知道我错过了什么吗?在

谢谢


Tags: 程序网络truenetlenif错误train
1条回答
网友
1楼 · 发布于 2024-10-02 16:22:59

所以, 因为这几天都没人回答,我觉得这真的很糟糕,所以我就自己找了份工作。我厌倦了使用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

它相当老套,但有点管用:

^{pr2}$

希望这能帮助别人

相关问题 更多 >