python - neurolab descargar
Biblioteca neurolab training newff (1)
Finalmente, después de unas horas con el mismo problema, solucioné el problema.
Esto es lo que está sucediendo: Neurolab está utilizando train_bfgs como su algoritmo de entrenamiento estándar. train_bfgs ejecuta fmin_bfgs desde scipy.optimize. Como argumento, se da una función, epochf. Esta función DEBE ejecutarse después de cada iteración al entrenar la red, para que el neurolab salga adecuadamente. Lamentablemente, fmin_bfgs no puede hacer esto cuando "la optimización finalizó correctamente" (uno puede pasar self.kwargs [''disp''] = 1 a fmin_bfgs desde /neurolab/train/spo.py para ver la salida desde scipy). No he investigado aún más por qué fmin_bfgs devuelve "optimización finalizada con éxito", pero tiene que ver con que el error es convergente.
He intentado con Python 2.7 y Python 3 con las versiones scipy 12.0 a 0.15 sin este cambio de comportamiento (como se sugiere ).
Mi solución es simplemente cambiar de entrenamiento train_bfgs a train_gd regular (descenso de gradiente) pero supongo que cualquier otro algoritmo de entrenamiento está bien.
net = nl.net.newff(inputNodes, [ hidden, output])
#change traning func
net.trainf = nl.train.train_gd
Para completar, el código que probé fue:
import neurolab as nl
hidden = 10
output = 1
test = [[0],[0],[0],[1],[1]]
net = nl.net.newff([[0,1]], [ 10, 1])
err = net.train(test, test, epochs = 500, show=1)
El problema solo ocurre a veces, por lo que se necesitan pruebas repetidas
Editar: el problema también se describe en https://github.com/zueve/neurolab/issues/25
¡Buena suerte!
Soy bastante nuevo en el uso de python y neurolab y tengo un problema con el entrenamiento de mi red neuronal de avance. He construido la red de la siguiente manera:
net = nl.net.newff([[-1,1]]*64, [60,1])
net.init()
testerr = net.train(InputT, TargetT, epochs=100, show=1)
y mi salida de destino es un vector entre 0 y 4. Cuando uso el nl.train.train_bfgs que tengo en la consola:
testerr = net.train(InputT, TargetT, epochs=10, show=1)
Epoch: 1; Error: 55670.4462766;
Epoch: 2; Error: 55649.5;
Como puede ver, fijé el número de épocas en 100 pero se detiene en la segunda época y después de la prueba de la red con Netresults=net.sim(InputCross)
tengo como matriz de salida de prueba un vector de 1 (totalmente erróneo) . Si uso las otras funciones de entrenamiento, tengo el mismo vector de prueba de salida lleno de 1, pero en ese caso durante el entrenamiento, las épocas alcanzan el número que establecí pero el error que se muestra no cambia. Lo mismo si el vector de salida del objetivo está entre -1 y 1. ¿Alguna sugerencia? ¡Muchas gracias!