Pregunta

Para mi proyecto universitario que estoy creando una red neuronal que se puede clasificar la probabilidad de que una transacción de tarjeta de crédito es fraudulento o no. Estoy entrenando con propagación hacia atrás. Estoy escribiendo esto en Java. Me gustaría aplicar multihilo, porque mi ordenador es un i7 de cuatro núcleos. Me molesta para pasar horas de entrenamiento y ver la mayoría de mis núcleos de inactividad.

Pero ¿cómo iba a aplicar a múltiples hilos de propagación hacia atrás? Backprop funciona mediante el ajuste de los errores hacia atrás a través de la red. Una capa debe hacerse antes de que el otro puede continuar. ¿Hay alguna manera de que puedo modificar mi programa para hacer telón de fondo de varios núcleos?

¿Fue útil?

Solución

En primer lugar no utilizan backpropagation. Hay muchas otras opciones que hay. Yo sugeriría tratando Rprop (propagación elástica). No va a ser tan grande de modificación a su algoritmo de propagación hacia atrás. No es necesario especificar la tasa o cantidad de movimiento de aprendizaje. Su realmente casi como si usted tiene un individuo, variable, la tasa de aprendizaje para cada conexión en la red neuronal.

En cuanto a la aplicación de múltiples hilos de propagación hacia atrás. Acabo de escribir un artículo sobre este tema.

http://www.heatonresearch.com/encog/mprop/compare.html

Básicamente creo un número de hilos y dividir los datos de entrenamiento para que cada hilo tiene una cantidad igual próximo. Estoy calculando los gradientes en cada hilo y que se resumen en una etapa de reducir. ¿Cómo se aplican los gradientes de los pesos depende del algoritmo de entrenamiento de propagación utilizado, pero la actualización de peso se realiza en una sección crítica.

Cuando se tiene considerablemente más muestras de entrenamiento que los pesos del código pasa mucho más tiempo en el cálculo del gradiente multi-hilo de la actualización crítica sección de peso.

proporciono algunos de los resultados de rendimiento en el enlace anterior. Es realmente acelerar las cosas!

Otros consejos

Para poder utilizar más núcleos de CPU con Java sólo se puede probar más opciones de JVM sin cambiar el código:

  • -server
  • -d64
  • -XX: -UseParallelGC

y otras opciones en http://java.sun.com/javase /technologies/hotspot/vmoptions.jsp

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top