2015-12-28 12 views
5

Sto usando neurolab in python per creare una rete neurale. Creo una rete newff e sto utilizzando la funzione di allenamento train_bfgs predefinita. Il mio problema è molte volte, l'allenamento termina prima che le epoche finiscano o che venga raggiunto anche il target di errore. Mi sono guardato intorno e ho trovato un post sulla pagina github dei neurolabs, dove hanno spiegato perché questo stava accadendo. Il mio problema è che se eseguo di nuovo il programma alcune volte, si attiva e l'allenamento inizia e poi cade anche l'errore (probabilmente alcuni pesi iniziali casuali sono molto migliori degli altri). Quello che voglio fare è mettere una sorta di check in allenamento in modo che se l'errore è troppo alto e le epoche che ha allenato non sono nemmeno vicine al totale, quindi riqualificare la rete (un po 'come rieseguire il programma) (magari resettando i pesi di default di rete)Neurolab riqualificare la rete

Ecco quello che ho scritto, ma ovviamente doesnt lavoro

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 

cosa sta succedendo a dire, quando passa la prima condizione, cioè troppo poche epoche di formazione, esegue il net.reset() prima di riavviarlo, ma in seguito, non è in corso alcuna formazione e questo diventa un ciclo infinito. Qualche idea di cosa mi manca?

Grazie

risposta

1

Quindi, Dal momento che questo è andato un risposto per qualche giorno, e penso che la sua davvero male per così così ho preso sulla mia auto per trovare un lavoro work-around. Sono stanco di riavviare lo script utilizzando lo os.execv(__file__, sys.argv), ma sul mio Mac è sempre un problema di autorizzazione, in più è troppo sporco, quindi ecco come faccio a farlo funzionare ora.

# 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 

sua piuttosto hacky ma funziona un pò:

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

Speranza che aiuta qualcuno