¿Cómo se comparan las bibliotecas de aprendizaje automático de C ++ con las disponibles en Python?

C ++ es un lenguaje completamente nativo, lo que significa que … el programa se convierte en un código ejecutable nativo que se ejecuta más rápido. Python es un lenguaje interpretado … es decir … depende del intérprete base de Python para su ejecución, por lo tanto, es lento.

C ++ es rápido: como es un lenguaje completamente nativo, no hay necesidad de ninguna interpretación. Por lo tanto, puede usar C ++ como un lenguaje en el que el rendimiento es el factor principal a tener en cuenta.

Como puedes ver en la foto. C ++ tiene muy menos tiempo de ejecución que cualquier otro lenguaje. Por lo tanto, lleva menos tiempo de cálculo que Python.

Python es productivo:

Como sabes, Python es un lenguaje simple y fácil de aprender y tiene un mayor nivel de abstracción. C ++ tiene una mala curva de aprendizaje y no es tan simple como Python. Aquí hay una curva de aprendizaje C ++ de muestra:

Ahora sobre el aprendizaje automático : el aprendizaje automático es muy diferente de una aplicación de software típica. Es una rama donde se debe dar mucha concentración a las matemáticas y al razonamiento lógico en lugar de escribir reglas simples para realizar una tarea.

Casi todas las bibliotecas de ML usan C o C ++ como una capa de fondo para acelerar el cálculo: Permítanme justificar esta afirmación, algunas de las bibliotecas de ML populares como TensorFlow, Theano, Dlib, OpenCV usan C o C ++ para implementar características de nivel más bajo para mejorar el rendimiento. Arquitectura TensorFlow:

Diferencia entre C ++ y Python para ML:

Como Python te hace ser más productivo y es fácil aprender la naturaleza, preferimos usar Python para casi todos los proyectos de ML. Todas las tareas complejas las lleva a cabo la capa más baja escrita en C ++ y podemos concentrarnos en desarrollar la aplicación haciendo uso de la simplicidad de Python. Si eres un programador muy bueno o profesional en C ++. Puede utilizar las funciones de nivel inferior directamente para lograr el máximo rendimiento.

No sé mucho sobre los marcos generales de aprendizaje automático. Supongo que hay al menos uno para la mayoría de los lenguajes de programación. Realmente solo he usado TensorFlow y Keras (ambos en Python), y ahora estoy mirando PyTorch. No sé cómo es usarlos desde C ++.

Quizás alguien que trabajó tanto en C ++ como en Python pueda darnos una mejor idea.

La comunidad de aprendizaje automático (al menos aprendizaje profundo) tiende a usar mucho Python. Es natural que las bibliotecas de Python obtengan muchas contribuciones y ayuda de la comunidad.

Puede usar Tensorflow, Torch, MXNET, Caffe y otros en C ++.

Sin embargo, el lenguaje de interfaz principal de TensorFlow es Python, y la mayoría de la gente lo usa en Python. Del mismo modo, probablemente la mayoría de las personas usan Caffe en C ++, no tengo evidencia ni conocimiento de esto.

Si tuviera que conocer Python y C ++ igualmente bien, elegiría python para cosas de aprendizaje profundo / aprendizaje automático. Solo porque es tan fácil y no hay demasiado código repetitivo para escribir para que las cosas funcionen, a diferencia de C ++. El soporte de la biblioteca es excelente para hacer muchas de las cosas que quieres hacer cuando trabajas en el aprendizaje automático:

  • tratar con CSV, bases de datos y otros formatos es fácil;
  • puedes trazar cosas fácilmente;
  • está interpretado, por lo que si no sabe cómo hacer algo cuando está desarrollando, puede despedir a un intérprete y resolverlo por prueba / error;
  • Muchas de las funciones matemáticas que probablemente desee utilizar en algún momento se implementan en sklearn o scipy;
  • sklearn, numpy, scipy, pandas y matlplotlib hacen que todo lo anterior sea mucho más fácil.

La mayoría de las bibliotecas de Python están codificadas en C ++, solo tienen una API de Python. Por lo tanto, deberían ser casi lo mismo, posiblemente con más acceso a las funciones / controles que están ocultos por la API. Tendrá toda la sobrecarga de C ++ asociada. Probablemente tendrá una capacidad de procesamiento de datos más rápida antes de llamar al modelo, pero no será tan lindo como parece ser el código Python.