2015-12-28 122 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; 
. 
. 

希望幫助一些一