2015-12-28 6 views
5

Ich verwende neurolab in Python, um ein neurales Netzwerk zu erstellen. Ich erstelle ein newff Netzwerk und verwende die Standard-Trainingsfunktion train_bfgs. Mein Problem ist oft, das Training endet einfach bevor die Epochen abgelaufen sind oder sogar das Fehlerziel erreicht ist. Ich schaute mich um und fand einen Post auf Neurolabs Github-Seite, wo sie irgendwie erklärten, warum das passierte. Mein Problem ist, wenn ich das Programm einige Male wiederhole, fängt es einfach an und das Training beginnt und dann fällt auch der Fehler (wahrscheinlich sind einige zufällige Startgewichte viel besser als die anderen). Was ich tun möchte, ist eine Art Check in das Training, so dass, wenn der Fehler zu hoch ist und die trainierten Epochen nicht einmal nahe am Gesamtwert liegen, das Netzwerk neu trainiert wird (so ähnlich wie das Programm neu gestartet wird) (vielleicht zurücksetzen) die Netzwerk-Standardgewichte)Neurolab Umschulung des Netzwerks

Hier ist, was ich geschrieben habe, aber natürlich tut es

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 

zu arbeiten, was vor sich geht, wenn es die erste Bedingung passiert, also zu wenige Trainings Epochen, es führt die net.reset() vor dem Neustart, aber dann, es gibt kein Training, das passiert und dies wird zu einer Endlosschleife. Irgendeine Idee, was ich vermisse? So

Dank

Antwort

1

, Da dies ging un für ein paar Tage beantwortet, und ich denke, es ist wirklich schlecht für SO so nahm ich es auf mich selbst eine Arbeits Behelfslösung zu finden. Ich müde müde Neustart des Skripts mit dem os.execv(__file__, sys.argv), aber auf meinem Mac, das ist immer ein Problem mit Genehmigung, plus es ist einfach zu schmutzig, so hier ist, wie ich es jetzt zum Arbeiten bekommen.

# 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 

Seine ziemlich hacky aber irgendwie funktioniert:

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

Hoffnung, dass jemand hilft

Verwandte Themen