He respondido esta pregunta general varias veces. La respuesta básica es: depende de su caso de uso.
TL; DR: TensorFlow para producción (y probablemente también funciona, como dijo Roman Trusov), PyTorch para investigación y diversión y Caffe2 para inferencia de dispositivos de borde (por ejemplo, una aplicación que está haciendo para su amigo que reconoce perros calientes o no).
Keras para la creación rápida de prototipos si no necesita mucha flexibilidad y Theano si es un DL de barba gris 😉
- ¿Se pueden describir las redes adversas generativas como un método de entrenamiento en el que se aprende la función de pérdida en lugar de seleccionarse manualmente?
- ¿La IA y el aprendizaje automático implican mucha codificación?
- ¿Puede explicar la optimización convexa sin matrices de arpillera y solo la segunda derivada?
- ¿Cuál es la diferencia entre el entrenamiento por lotes, en línea y mini-lote en redes neuronales? ¿Cuál debo usar para un conjunto de datos de pequeño a mediano tamaño con fines de predicción?
- ¿Cuáles son algunos libros sobrevalorados en aprendizaje automático, estadísticas y aprendizaje profundo?
Un resumen general:
TensorFlow : para casos de uso de producción, donde todavía necesita un poco de flexibilidad, TensorFlow es probablemente su mejor opción. Permite flexibilidad a través de la capacidad de especificar un gráfico computacional arbitrario (bueno, en su mayoría) y es eficiente porque ese gráfico computacional dinámico se puede analizar en busca de optimizaciones, como las optimizaciones de memoria en el lugar que pueden mejorar la eficiencia. También tiene TensorFlow Serving y una gran cantidad de otras integraciones. Además, hay mucho apoyo de la comunidad y muchos documentos implementados en TensorFlow. TF es probablemente el marco más maduro en este momento, tiene muy buenas integraciones y es probablemente el más estable para la producción. También cuenta con el soporte de Google y hay considerables recursos detrás de él, y se muestra en las características, por ejemplo, la instalación es sencilla y se paralelizará automáticamente a través de sus GPU. Tenga en cuenta que TensorFlow Fold le permite emular gráficos computacionales dinámicos y obtener muchos de los beneficios de PyTorch.
PyTorch: El principal reclamo de fama para PyTorch es que es un gráfico computacional dinámico (hay algunos otros como Chainer, pero PyTorch es el marco más frecuente), lo que significa que en lugar de “definir y ejecutar” (donde se especifica un cálculo estático gráfico y luego ejecutarlo muchas veces como TensorFlow) tiene “definir por ejecución”, lo que significa que especifica un gráfico computacional para cada iteración. Esto tiene muchos beneficios útiles para ciertos tipos de RNN, situaciones en las que necesita generar pesos (es decir, HyperNetworks) y cosas en las que cambia la estructura misma de la red (por ejemplo, NN recursivos). PyTorch también tiene una interfaz realmente agradable y tiene el soporte de Facebook. Las desventajas son que es un marco relativamente nuevo, por lo que no hay muchas integraciones con él, no hay mucha comunidad y no hay muchos documentos implementados en él. Y tenga en cuenta que los gráficos computacionales dinámicos harán que muchas cosas sean bastante ineficientes porque no se pueden realizar optimizaciones estáticas.
Caffe2: Caffe2 es un marco mucho más nuevo y parece ser el marco de implementación de inferencia de dispositivos de borde preferido para Facebook. Parece ser el sucesor de Caffe en que es muy ligero y eficiente para la implementación, pero bastante limitado en flexibilidad. Use esto básicamente para la inferencia de teléfonos inteligentes.
Keras: Keras es realmente bueno para la creación rápida de prototipos, pero se puede limitar severamente su flexibilidad. Por ejemplo, para mi último experimento, quería probar convoluciones dilatadas, y funcionó, pero las convoluciones separables dilatadas no podían funcionar, así que terminé usando Caffe para eso. Además, Caffe es sorprendentemente flexible en el sentido de que todos los parámetros son polimórficos a la convolución, por lo que múltiples tipos de parámetros que definen diferentes tipos de capas de convolución pueden usarse simultáneamente / en conjunto en la misma capa.
Theano: Básicamente, (uno de) el primer marco importante para DL. Realmente ya no veo ningún caso de uso convincente.