De hecho, puedo relacionarme con esta pregunta. Una vez estuve en esta situación yo mismo. Ahora supongo que tiene sus antecedentes teóricos cubiertos en el aprendizaje profundo, y conoce todas las cosas matemáticas detrás de la mayoría de las arquitecturas de redes profundas, por ejemplo, redes totalmente conectadas, codificadores automáticos, redes, etc.
Necesitaba la implementación de la GPU, ya que estoy en el inicio de la robótica, y hago una gran visión por computadora e investigación de IA. Mi teoría siempre fue muy fuerte, pero tengo algo de semana en programación. Estaba haciendo un poco de investigación de visión por computadora, y los algoritmos no podían usarse para cálculos en tiempo real, ya que eran lentos en las CPU (soy dueño de una placa de clase de servidor único con Z10PE-D16 con dos procesadores Xeon 2620 v3). Por lo tanto, tenía recursos informáticos limitados para asignar a cada uno de los algoritmos que operan en el robot. Entonces fue cuando finalmente decidí aprender CUDA, después de muchas postergaciones.
Ahora también tenía limitaciones de tiempo. Simplemente no podía permitirme dar más de 2 o 3 días para aprender CUDA, ya que eso habría afectado la investigación que estaba haciendo. Entonces, después de mucho buscar, encontré un curso de programación CUDA en Udacity. Este curso comienza desde cero y luego se acumula. No necesita pasar por todo el curso para poder comprender CUDA y programar las GPU. Ahora no recuerdo cuánto del curso seguí, pero sé que fue menos del 50% del curso. Eso era mucho más de lo que necesitaba. Después de eso, cuando aprendí el CUDA básico, comencé a implementar algoritmos en CUDA. Finalmente, comencé a progresar en CUDA y me volví muy bueno en eso. Descubrí algunas implementaciones específicas cuando las necesitaba en mi investigación.
- ¿Cuáles son los problemas de investigación abierta en la simulación basada en agentes?
- ¿Cuáles son los principios del procesamiento del lenguaje natural del resumen automático? ¿Cuáles son los mejores recursos? ¿Cuántas bases tengo que hacer en PNL para lograr esto? ¿Y qué partes de las teorías de PNL / PC son importantes para construir tal sistema?
- ¿Hay alguna justificación para crear una torreta automatizada con capacidades como la de este video?
- ¿Existe una superposición entre la nanotecnología y la inteligencia artificial / aprendizaje automático?
- ¿Cuál es la diferencia entre aprendizaje automático, red neuronal y cómo se relacionan con el aprendizaje profundo?
Ahora, codifico regularmente los núcleos de red profunda en las GPU. Por ejemplo, he codificado por completo una información general (lo que significa que permite al usuario especificar las unidades de activación y la cantidad de capas y la cantidad de unidades en cada capa, y hace el resto del trabajo) de alimentación completamente conectada arquitectura neta desde cero en CUDA. También es eficiente en memoria, aunque no lo he comparado con las bibliotecas. Actualmente estoy escribiendo una arquitectura CNN general en C ++ / CUDA. De todos modos, mi implementación, durante el entrenamiento, se ejecuta tan rápido como las bibliotecas modernas. Por ejemplo, uno de mis pasantes codificó una arquitectura de red profunda usando theano, e hice lo mismo desde cero en CUDA / C ++. Ambos corrieron en el mismo hardware, y los tiempos de procesamiento por lotes fueron casi los mismos.
Además, si desea tener un control total sobre todos y cada uno de los parámetros de su arquitectura (por ejemplo, durante las pruebas, ya que el tiempo de entrenamiento no importa mucho, si no es en meses o días) y tener un control muy fino sobre asignación de memoria, tendrá que codificar su red profunda en CUDA. Recientemente desarrollé una nueva arquitectura de red profunda, para el rendimiento en tiempo real usando una sola GPU GTX 970, para la tarea de detección de carreteras, para lograr el rendimiento de clasificación en tiempo real, escribí los núcleos por mi cuenta.
Pero para hacer / aprender todo esto, ese curso de Udacity es lo único que solía estudiar formalmente CUDA y eso también solo el 50% de ese curso. Ese curso le enseñará todo lo necesario para que pueda escribir sus núcleos.
Ahora, si está buscando algo que le permita entrenar arquitecturas complejas sin necesidad de codificar sus propios núcleos de red profunda, para capacitación y pruebas, puede usar theano, caffe o antorcha. Para las CNN, puede específicamente cuda-convnet. Cuda-Convnet admite muchas unidades de activación diferentes y un número arbitrario de capas, y supongo que muchas opciones de agrupación diferentes (máximo, promedio, L2). Pero no estoy seguro, ya que personalmente no he usado estas bibliotecas, solo codifico en C ++ y CUDA.
Pero de todos modos, si trabaja en visión y robótica, será beneficioso aprender al menos un poco de CUDA. Pero si las pruebas en tiempo real no son su objetivo, puede concentrarse por completo en las bibliotecas, sin preocuparse por cómo se realiza toda la codificación cuda de bajo nivel. Pero si vas a ese curso de CUDA sobre udacity, creo que todo el curso necesario se puede hacer en pocas horas.
Eso es todo lo que diré, no hay detalles adicionales en su pregunta, en cuanto a cuál es su objetivo específico. También he dejado en claro mi experiencia en programación antes de comenzar CUDA.
¡Buena suerte!