2011-11-29 9 views
5

Necesito entrenar la red y luego alimentarla con datos de prueba uno por uno. ¿Hay algún ejemplo o documento que lo incluya?cómo alimentar a pybrain ffn con una entrada (a una red ya entrenada)?

Para lograr eso he serializado la red entrenada y la uso con cada nueva entrada entrante. El problema es que me colapsé de _convertToOneOfMany y aunque entiendo su propósito (de here) no entiendo cómo funciona exactamente.

Su comportamiento no es determinista para mí. Debe interpretar de alguna manera las clases y las etiquetas, y debe haber algún requisito que me falta. Funciona para todo el conjunto de datos, sin embargo, si tomo solo la línea al azar, se vuelve loco.

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: para ser más precisos déjame decirte lo que estoy haciendo: Quiero entrenar la red para el ejemplo más famoso NN en Internet;) - Iris conjunto de datos.

Es algo así:

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

El último cero es la clase. Todo el conjunto de datos contiene 60 filas. 20 durante 0, 20 por 1 y 2. 20 para

leí el archivo con los datos y la construcción de conjunto de datos:

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) 

Mi problema se relaciona con _convertToOneOfMany(). Cuando el conjunto de datos o el archivo de datos tiene solo dos entradas (no 60, divididas en tres clases) se bloquea con excepción desde el comienzo de la pregunta.

Ejemplo de datset estrellarse:

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 

Ejemplo de trabajar 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 

¿Cómo puede convertToOneOfMany() ser conectado al número de entradas en el conjunto de datos o el tamaño de un subconjunto de clases? También se bloquean las entradas de una fila ..

Respuesta

0

Puede ser bueno si pega más de su código. En cuanto a su pregunta, está en su documentación: http://pybrain.org/docs/quickstart/network.html Básicamente es este comando: net.activate ([2, 1]) en este caso la red tiene 2 entradas, y él ingresa los valores 2 y 1 Recomiendo revisando su documentación

+1

Expandí la pregunta, ¿podría echar un vistazo? ¡Gracias! ¿Hay algún foro o lista de correo para usuarios experimentados de PyBrain? – user425720

Cuestiones relacionadas