2011-11-29 11 views
5

Ho bisogno di addestrare la rete e quindi alimentarla con i dati di test uno per uno. C'è qualche esempio o documento incluso?come si alimenta pybrain ffn con una voce (alla rete già formata)?

Per raggiungere il risultato, ho serializzato la rete addestrata e la utilizzo con ogni nuova voce in entrata. Il problema è che ho avuto un crash da _convertToOneOfMany e anche se ne capisco lo scopo (da here) Non capisco come funzioni esattamente.

Il suo comportamento non è deterministico per me. Deve interpretare in qualche modo classi ed etichette e ci deve essere qualche requisito che mi manca. Funziona per l'intero set di dati, tuttavia se prendo la linea solo casuale impazzisce.

Traceback (most recent call last): 
File "ffn_iris.py", line 29, in <module> 
tstdata._convertToOneOfMany() 
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyBrain-0.3-py2.6.egg/pybrain/datasets/classification.py", line 142, in _convertToOneOfMany 
newtarg[i, int(oldtarg[i])] = bounds[1] 
IndexError: index (2) out of range (0<=index<1) in dimension 1 

EDIT: Per essere più precisi lasciate che vi dica quello che sto facendo: voglio allenare rete per l'esempio più famoso NN in Internet;) - Iris Dataset.

E 'qualcosa di simile:

5.1,3.5,1.4,0.2,0 
4.9,3.0,1.4,0.2,0 
4.7,3.2,1.3,0.2,0 
4.6,3.1,1.5,0.2,0 
etc... 

L'ultimo a zero è la classe. L'intero set di dati contiene 60 righe. 20 per 0, 20 per 1 e 20 per 2.

ho letto il file con i dati e costruire set di dati:

alldata = ClassificationDataSet(4, class_labels=['Iris-setosa', 
               'Iris-versicolor', 
               'Iris-virginica']) 

--- loop here --- 

alldata.addSample(line[0:4], line[4]) 


--- create testing and training sets --- 
tstdata, trndata = alldata.splitWithProportion(0.7) 


--- converted matrixes --- 
trndata._convertToOneOfMany() 
tstdata._convertToOneOfMany() 

--- not important, just for completeness ---- 
fnn = buildNetwork(trndata.indim, 10, trndata.outdim, outclass=SoftmaxLayer) 
trainer = BackpropTrainer(fnn, dataset=trndata, 
          momentum=0.01, verbose=True, 
          weightdecay=0.01) 

Il mio problema si riferisce a _convertToOneOfMany(). Quando il set di dati o il file di dati contiene solo coppie di voci (non 60, suddivise in tre classi) si blocca con eccezione dall'inizio della domanda.

Esempio di Set di dati crash:

6.5,3.0,5.2,2.0,1 
6.5,3.0,5.2,2.0,1 
6.2,3.4,5.4,2.3,2 
6.5,3.0,5.2,2.0,0 

Esempio di lavorare uno:

6.5,3.0,5.2,2.0,1 
6.2,3.4,5.4,2.3,2 
6.5,3.0,5.2,2.0,0 

Come può convertToOneOfMany() essere collegato al numero di voci nel set di dati o la dimensione di un sottoinsieme di classe? Anche le voci di una riga si bloccano.

risposta

0

Può essere utile se si incolla più del codice. Per quanto riguarda la tua domanda, è sulla loro documentazione: http://pybrain.org/docs/quickstart/network.html Fondamentalmente è questo comando: net.activate ([2, 1]) in questo caso la rete ha 2 ingressi, e lui/lei inserisce i valori 2 e 1 Io raccomando stai passando attraverso la loro documentazione

+1

Ho ampliato la domanda - potresti dare un'occhiata? Grazie! C'è qualche forum o mailing list per utenti esperti di PyBrain? – user425720