Pregunta

a partir de su experiencia, que es el enfoque más eficaz para implementar redes neuronales artificiales prototipos?Es una gran cantidad de publicidad sobre R (gratis, pero yo no trabajo con ella) o Matlab (no libre), otra opción posible es el uso de un lenguaje como C++/Java/C#.La pregunta es, dirigido principalmente a las personas que intentaron poner a prueba algunas arquitecturas de redes neuronales o algoritmos de aprendizaje.

Si tu opción es el uso de un lenguaje de programación diferente de los tres mencionados anteriormente, pueden decirme sus nombres y algunas explicaciones acerca de su elección (a excepción de:esta es la única/idioma más utilizado conocido por mí).

Gracias.

¿Fue útil?

Solución

Dado que las redes neuronales se utilizan mucho por los científicos, y no tanto por los programadores, elegir un lenguaje de programación que se dirige a los científicos y proporciona buenas bibliotecas de redes neuronales.

Python es una opción razonable ya que es ampliamente utilizado por los científicos. Dos distribuciones para empezar son

http://www.pythonxy.com/

http://code.enthought.com/

Estas distribuciones de Python incluyen una gran cantidad de módulos adicionales que no están en la biblioteca estándar de Python, pero que son muy útiles para el tipo de programación que hacen los científicos. Buscando el índice de paquetes Python viene con un par de paquetes de redes neuronales que pueden estar bien si se acaba de aprender acerca de las redes neuronales.

http://pypi.python.org/pypi?:action= buscar y plazo = neuronal y publica = buscar

Sin embargo, si usted está haciendo un trabajo serio con redes neuronales que se desea algo así como la biblioteca Rápido de redes neuronales. Esto viene con enlaces Python para que pueda hacer su programación en Python, utilizar la amplia variedad de módulos de Python para la representación gráfica, visualización, manipulación de datos y así sucesivamente. Sin embargo, sus redes neuronales se ejecutará utilizando el código compilado optmised de la biblioteca FANN. Lo mejor de ambos mundos.

En otras palabras, para ejecutar el código de red neuronal real, necesita C, no Java. Desde librerías C que no se integran bien con Java, elegir un idioma que se integra sin problemas con librerías C. Python hace eso y es también bastante más productivo que Java ya que hay muchas menos líneas de código necesarias para explicar sus algoritmos. Algunas personas han encontrado unas 10 veces más de incremento en la productividad de Java.

R mencionadas, tal vez porque tiene funciones estadísticas que tendría que usar, o tal vez con personas disponibles que pueden escribir código R. Una vez más, la elección de Python frente a R no es una o la otra decisión. Puede utilizar los dos.

La biblioteca RPY permite que los programas de Python para acceder a bibliotecas de investigación y código. El uso de este que iba a escribir sus principales programas en Python y el tratamiento de R como una herramienta para proporcionar bibliotecas, de la misma manera que usted hace uso de la biblioteca FANN que fue escrito en C.

http://rpy.sourceforge.net/

Hay otro módulo llamado RSPython que funciona en ambos sentidos, por lo que los programas de I pueden tener acceso a bibliotecas escritas en Python. Esto sería útil si usted tiene un experto programador R ayudándole.

http://www.omegahat.org/RSPython/

Y eso no es todo. Puede aprovechar Python para simplificar la programación Java. Si usted tiene un motor de red neuronal de Java, todavía se puede escribir la mayor parte de su programa en Python usando la versión de Jython que funciona en la máquina virtual de Java y permite el uso de las bibliotecas y clases de Java en el código. Y todavía se puede usar la biblioteca FANN rápida, así, ya que proporcionan enlaces para programas Java.

La principal razón que recomiendo Python para su trabajo es que es utilizado por una gran cantidad de científicos que es por eso que hay dos distribuciones de orientación científica disponible. Una segunda razón es que Python es muy fácil para los programadores novatos para empezar con, y en la exploración de las redes neuronales es probable que comenzar con simulaciones simples y trabajar hasta las más complejas, con más la manipulación y el análisis de los resultados de los datos. Python le permitirá construir su propia biblioteca de código, y convertirse en un programador de Python experto para que pueda centrarse más de su atención en los problemas de la red neural. Si rebotan con un poco de Java, y un poco de C ++ y un poco de R, entonces usted será capaz de pasar menos tiempo en las redes neuronales. Esa estrategia podría ser bueno para Someone que quiere una carrera en la programación, pero no para alguien que quiere lograr algunos resultados significativos con redes neuronales.

Incluso si su trabajo de redes neuronales se extiende en hardware especializado, los llamados chips de neuromórficos, todavía se puede aprovechar Python como este trabajo de los NIH demuestra:

http://www.ncbi.nlm.nih.gov/pmc / artículos / PMC2701676 /

Otros consejos

He intentado utilizar tanto de mayor nivel de abstracción idiomas (matlab, java) y más bajos (C).Tanto el uso de cajas de herramientas y bibliotecas y de codificación de ellos yo mismo.La respuesta general?Ni es la herramienta perfecta.Por favor, tenga en cuenta que:

  • un prototipo puede no ser suficiente:a menudo, usted necesita para ejecutar la red a través de grandes muestras, o varias veces a través de un subconjunto de muestras (en el caso de la evolución de redes neuronales) para obtener resultados decentes.Si usted tiene que ejecutar una red de un millón de veces, incluso un pequeño aumento en el rendimiento podría ser una gran ayuda y ahorro de tiempo (es decir,C a lo largo de matlab);

  • si, por otra parte, usted necesita la facilidad de codificación que desee utilizar uno de los muchos pre-envasados bibliotecas (javaNN, etc);

  • ¿qué tipo de red neuronal que estás usando?tiempo continuo de la recurrente de las redes neuronales (CTRNN)?Backprop?¿Cómo hacer de tren?¿Cómo comprobar sus resultados?Es la exactitud importante?(es decir,están ejecutando en un dispositivo pequeño, tal como una memoria limitada de robótica de la junta de control, como los Arduinos?)

Si tienes tiempo libre, te sugiero que

  1. aprender los conceptos utilizando un lenguaje de alto nivel, o incluso pseudocódigo primera;
  2. una vez que usted está familiarizado con todas las complejidades, especialmente si se utiliza la evolución de las redes neuronales, elija un idioma que ya están familiarizados con
  3. entonces es posible que desee comenzar a investigar cómo optimizar la velocidad, la memoria, etc.

Espero que esto ayude.

He utilizado neuronal de Matlab redes caja de herramientas, en cierta medida, y lo disfruté como una herramienta de prototipado debido a su interfaz gráfica que le permite configurar la red, experimentar con tamaños de entrenamiento frente a los datos de entrada de prueba, y su posterior Ensayos formación todo construido en. Me parecía agradable y natural para empezar a ...

También experimentó con (Object Oriented Java Neural Motor) Joone . Se encuentra bastante bien, y en ese momento yo era un poco de un aficionado y todavía tenía problemas para conseguir diversas redes en funcionamiento, con las pruebas. Es Java, por lo que no puede tener el rendimiento que es posible que desee si se está entrenando grandes sistemas complejos, pero su API era muy accesible.

También he visto trabajar un poco con inundación en C ++. Tiene un montón de clases establecidos con las redes que sean apropiados para resolver una serie de problemas. Vale la pena echarle un vistazo.

Yo también lo recomendaría altamente pitón. Para un prototipo, pitón es una gran elección: es más fácil y más rápido para programar en el, hay un gran número de bibliotecas disponibles, y se utilizan ampliamente en la comunidad científica.

Además, si está utilizando Python, también puede tomar ventaja de la excelente PyBrain paquete que contiene los algoritmos para las redes neuronales, el aprendizaje por refuerzo, aprendizaje no supervisado, y otras tareas de aprendizaje automático, que debe ayudar a construir un prototipo rápido.

Esto depende de su configuración actual. Cuando solía trabajar en ellos de vuelta en días de colegio, tuve que usar C ++ + + MPI recetas numéricas. Esto se hizo porque tenía que compartir la carga sobre el grupo grande Beowulf.

Si sus necesidades de computación no son grandes, nada haría. bibliotecas en envases previos están disponibles en todas las plataformas (R, Python (numpy, scipy), C / C ++ (recetas numéricas), etc.). Si se siente cómodo de programación en cualquiera de ellos, no debería ser un gran problema.

Si tuviera que crear prototipos de nada ahora, probablemente me vaya con Python (sólo porque me resulta mucho más fácil para la creación de prototipos)

Scilab es una alternativa de código abierto a Matlab.

Usted puede experimentar con redes neuronales utilizando la ANN Toolbox para Scilab .

Enfoque en la teoría y los experimentos. Elegiste características discriminantes para sus muestras? ¿Cuál es el estado de su entrenamiento y prueba. Para cada experimento, el estudio de la matriz de confusión. ¿Tiene una idea de por qué está mal clasificado una muestra? ¿Le parece lógico que? Si no es así, que cuentan no utiliza ayudaría?

Ejecución viene a continuación, utilizar el idioma en el que está familiarizado. Un lenguaje administrado como Java o C # es probable que sea menos propenso a errores: al menos es menos probable que arruinar las cosas a causa de puntero o errores de asignación de memoria. Optimización ocupa el último lugar (después de algunos perfiles decente como siempre).

"Encog es un marco de aprendizaje de la red y de la máquina neural avanzada. Encog contiene clases para crear una amplia variedad de redes, así como clases de apoyo para normalizar y datos de proceso para estas redes neurales. Encog entrena utilizando propagación elástico multiproceso. Encog puede también hacer uso de una GPU a un mayor tiempo de procesamiento velocidad. un banco de trabajo basada en GUI también se proporciona para ayudar a modelo y entrenar las redes neuronales. Encog ha estado en desarrollo activo desde el año 2008 ".

Encog está disponible para Java, C # .Net y Silverlight.

http://www.heatonresearch.com/encog

En mis clases en la escuela nn hemos utilizado MATLAB y luego usamos java para mi tesis.

Yo sugeriría java o Matlab. Matlab, ya que probablemente ya tiene mucho de lo que pueda necesitar. Y Java, ya que es rápido de implementar lo que podría faltar en proyectos de código abierto. Y Besided ya que además de la aplicación de las redes neuronales es posible que tenga alguna forma de visualizarlos. Y para que personalmente creo que Java o MATLAB es bastante fácil.

inundación . Es gratis, completo y escrito en C ++.

Las implementaciones en Matlab son sofisticados y completos. He encontrado que es suficiente para la evaluación de diferentes tipos de redes. También es muy programable utilizando las interfaces externas.

Sin embargo, dado que las implementaciones de los algoritmos son de origen no abierto, a veces es más difícil cuando se necesita para mover una determinada pieza de código en una aplicación fuera de Matlab, como mi mano codificado implementaciones de diferentes tipos de redes neuronales produce diferentes resultados.

He comenzado a escribir una aplicación NN usando C ++ y se encontró que no sabía lo suficiente sobre las matemáticas involucradas en el principio. Lo que terminó hapenning fue que era demasiado difícil de refactorizar el código cuando estaba Optimizando el modelo de cálculo.

Con el tiempo me dio a MATLAB como lo fue sin duda un mejor compañero para aprender cómo funcionan las redes neuronales. Yo era capaz de hacer grandes cambios en el algoritmo utilizando un par de pulsaciones de teclas y representa gráficamente los resultados también.

Tal vez mi experiencia habría sido mejor si hubiera utilizado un marco de cálculo de matriz ya construido. Teniendo en cuenta que es como se hace en 3D no debe haber algunas bibliotecas muy optimizados que hay para la mayoría de los idiomas. Diablos que también podría aprovechar Direct3D u OpenGL para eso, pero estoy seguro de que hay algo más adecuado para redes neuronales por ahí.

Creo que no estoy proporcionando mucha información sobre lo que debe hacer. sin embargo, puedo decir lo que no debe hacer -. y que está tratando de escribir el código de manipulación de matrices mismo

Es posible que desee dar Weka un vistazo . Tiene algunas herramientas integradas para cosas como la visualización de datos, y que ha estado presente desde hace años ( algunas capturas de pantalla ).

A mi en el trabajo con redes neuronales la clave es conseguir que el conjunto de entrenamiento derecho no tanto como la red en sí está actualised en el código. Yo elegiría un lenguaje basado en el tipo de problema que está tratando de resolver el uso de la red. Por la propia red C ++, C #, Python y Java son todas viables.

¿Está utilizando esto en relación con un problema que requiere tratamiento de la imagen? En cuyo caso es probable que desee algo que se conecta a una biblioteca de procesamiento de imágenes como OpenCV fácilmente. ¿O hay algún procesamiento de audio involucrados?

Es posible que necesite visualizar fácilmente la formación fija de modo que fácil sería esto con el idioma de su elección? Se puede trabajar con OpenGL o DirectX bibliotecas ya sea directamente o mediante un envoltorio de algún tipo? Para DirectX las opciones son C ++ y C #. Tendrá un mayor nivel de abstracción decir utilizando el trabajo de WPF?

He utilizado C # porque estoy familiarizado con él y pueden aprovechar las numerosas tecnologías de manipulación en .NET y WPF usar para cualquier visualizaciones de datos necesarios.

También se quieren dar Nen una oportunidad - Es gratis, fácil de usar y muy ligero. También rel="nofollow"> fuera-de-la-caja-de comparación en muchas regresión populares - Clasificación y-bases de datos.

Normalmente cuando estaba jugando con este tipo de algoritmos, he encontrado que el uso de la fuente abierta Weka Toolkit fue una gran manera de crear prototipos y descubrir un montón de diferentes algoritmos de aprendizaje (no sólo redes neuronales artificiales). En estos días, parece que tienen fijaciones de un montón de diferentes idiomas, por lo que no deben estar vinculados a Java si desea interactuar con Weka a nivel de código.

Una vez que encontré y entendía algo que era fresco / haciendo un muy buen trabajo de clasificación, escribí el algoritmo en C o C ++ en parte por diversión y en parte para obtener las ganancias de velocidad necesarios que se requieren para trabajar con grandes conjuntos de datos.

Utilice C ++ y si la red neural es bastante simple no utilizan marcos extraños por ahí.

Tal vez hace 5 años me hice un solucionador de Sokoban mediante aprendizaje por refuerzo. En el momento que decidimos ir con Java y utilizar algunos Agent Framework desarrollado por una universidad italiana.

En primer lugar mala decisión aquí era utilizar este marco. Básicamente tenía bichos aquí y allá que nos causó a perder un montón de tiempo de depuración de código del marco.

Una vez que llegamos al punto en el que todo era estable, entrenamiento de la red neuronal era más que muertos lento. Lo dejamos funcionando durante la noche en una máquina bastante potente y todavía resuelto muy pocos puzzles. Básicamente Java asignación de objetos y recolección de basura estaban dañando todo el funcionamiento del sistema bastante mal. Ajustamos un poco la aplicación mediante la creación de grupos de objetos en lugar de asignar todo el tiempo pero el rendimiento del programa era todavía un orden de magnitud inferior a una asignación similar que fue implementado en C ++ utilizando directamente los zócalos.

Espero que esto ayude!

Bueno, si te gusta al prototipo rápido, entonces Python o MATLAB parece la mejor. Hay una gran cantidad de bibliotecas disponibles para las redes neuronales. Algunas de las bibliotecas están diseñados de tal manera que te dan cantidad mínima de ajustar su alcance, pero las bibliotecas como Teano son extremadamente rápido que la función se compilan internamente en C (supongo que el más rápido hasta la fecha) y le da toda la funcionalidad de interior pellizcar. Teano es típico usar al principio, pero es muy potente. Y más tarde, si desea pasar de los nervios a lo profundo de los nervios entonces no hay mucha diferencia. Profesional Kagglers también tienden a utilizar esta biblioteca. Esta biblioteca también cuenta con el apoyo de la GPU. De todas las bibliotecas que he utilizado me encontré Teano ser el más útil y potente. Algunos de los otros estado del arte marco para el aprendizaje profundo como Caffe se desarrollan en Teano.

Espero que esto ayude.

He implementado varios prototipos de redes neuronales en Java y C / C ++. Conseguir un alto rendimiento, utilizan con C / C ++.

Uno de mi aplicación (no vectorizado) de un Perceptrón multicapa básica hace un millón de iteraciones de entrenamiento (con una configuración de 2 entradas, 4 ocultos y 1 nodo de salida) en menos de un minuto. Mi aplicación casi idéntica en Java tiene una enorme cantidad que de tiempo para hacer esto. También es posible usar una biblioteca de álgebra lineal como Eigen para crear una versión vectorizada para mejorar la velocidad de procesamiento.

Imagínese que usted utilizaría el suyo para cualquier tipo de procesamiento de imágenes (reconocimiento facial, OCR, etc.) con, por ejemplo, las imágenes de 28x28 píxeles. Usted tendría 784 unidades de entrada y al menos tantas unidades ocultas. Esto tiene una enorme cantidad de tiempo para entrenar por lo que es beneficioso para ahorrar valiosos minutos, horas o días.

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