Recientemente comencé a estudiar aprendizaje profundo y otras técnicas de aprendizaje automático, y comencé a buscar marcos que simplificaran el proceso de construir una red y entrenarlo, luego encontré TensorFlow, que tenía poca experiencia en el campo, para mí, parece que la velocidad es un Gran factor para hacer un gran sistema ML aún más si se trabaja con aprendizaje profundo, entonces, ¿por qué Google eligió Python para hacer TensorFlow? ¿No sería mejor hacerlo sobre un lenguaje que se pueda compilar y no interpretar?
¿Cuáles son las ventajas de usar Python sobre un lenguaje como C ++ para el aprendizaje automático?
python
c++
machine-learning
tensorflow
Ollegn
fuente
fuente
Respuestas:
Lo más importante a tener en cuenta sobre TensorFlow es que, en su mayor parte, el núcleo no está escrito en Python : está escrito en una combinación de C ++ y CUDA altamente optimizados (lenguaje de Nvidia para programar GPU). Gran parte de eso sucede, a su vez, al usar Eigen (una biblioteca numérica de C ++ y CUDA de alto rendimiento) y cuDNN de NVidia (una biblioteca DNN muy optimizada para GPU NVidia , para funciones tales como convoluciones ).
El modelo para TensorFlow es que el programador usa "algo de lenguaje" (¡muy probablemente Python!) Para expresar el modelo. Este modelo, escrito en las construcciones TensorFlow como:
en realidad no se ejecuta cuando se ejecuta Python. En cambio, lo que realmente se crea es un gráfico de flujo de datos que dice tomar entradas particulares, aplicar operaciones particulares, suministrar los resultados como entradas para otras operaciones, y así sucesivamente. Este modelo se ejecuta mediante un código C ++ rápido y, en su mayor parte, los datos que pasan entre operaciones nunca se vuelven a copiar en el código Python .
Luego, el programador "impulsa" la ejecución de este modelo tirando de los nodos, para entrenamiento, generalmente en Python, y para servir, a veces en Python y otras en C ++ sin procesar:
Esta Python (o llamada de función C ++) utiliza una llamada en proceso a C ++ o un RPC para que la versión distribuida llame al servidor TensorFlow de C ++ para indicarle que se ejecute, y luego copia los resultados.
Entonces, dicho esto, reformulemos la pregunta: ¿Por qué TensorFlow eligió Python como el primer lenguaje bien soportado para expresar y controlar la capacitación de modelos?
La respuesta a eso es simple: Python es probablemente el lenguaje más cómodo para una amplia gama de científicos de datos y expertos en aprendizaje automático que también es tan fácil de integrar y controlar un backend C ++, a la vez que es general, ampliamente utilizado tanto dentro como fuera de Google, y de código abierto. Dado que con el modelo básico de TensorFlow, el rendimiento de Python no es tan importante, fue un ajuste natural. También es una gran ventaja que NumPy facilita el preprocesamiento en Python, también con alto rendimiento, antes de alimentarlo a TensorFlow para las cosas realmente pesadas de CPU.
También hay un montón de complejidad al expresar el modelo que no se usa al ejecutarlo: inferencia de forma (por ejemplo, si haces matmul (A, B), ¿cuál es la forma de los datos resultantes?) Y el cálculo automático de gradiente . Resulta que fue agradable poder expresarlos en Python, aunque creo que a largo plazo probablemente se trasladarán al backend de C ++ para facilitar la adición de otros lenguajes.
(La esperanza, por supuesto, es admitir otros idiomas en el futuro para crear y expresar modelos. Ya es bastante sencillo hacer inferencia usando varios otros idiomas: C ++ funciona ahora, alguien de Facebook contribuyó con enlaces Go que estamos revisando ahora , etc.)
fuente
It's already quite straightforward to run inference using several other languages
Ser un programador de Prolog? Simplemente no me queda; Parece una palabra fuera de lugar.TF no está escrito en python. Está escrito en C ++ (y utiliza bibliotecas numéricas de alto rendimiento y código CUDA ) y puede verificar esto mirando su github . Por lo tanto, el núcleo no está escrito en Python, pero TF proporciona una interfaz para muchos otros lenguajes ( Python, C ++, Java, Go )
Si vienes de un mundo de análisis de datos, puedes pensar en ello como numpy (no escrito en python, pero proporciona una interfaz para Python) o si eres un desarrollador web, piensa en ello como una base de datos (PostgreSQL, MySQL, que se puede invocar desde Java, Python, PHP)
La interfaz de Python (el lenguaje en el que las personas escriben modelos en TF) es la más popular debido a muchas razones . En mi opinión, la razón principal es histórica: la mayoría de los usuarios de ML ya lo usan (otra opción popular es R), por lo que si no proporciona una interfaz para Python, su biblioteca probablemente esté condenada a la oscuridad.
Pero estar escrito en python no significa que su modelo se ejecute en python. Por el contrario, si escribió su modelo de la manera correcta, Python nunca se ejecuta durante la evaluación del gráfico TF (excepto tf.py_func () , que existe para la depuración y debe evitarse en el modelo real exactamente porque se ejecuta en Lado de Python).
Esto es diferente de, por ejemplo, numpy. Por ejemplo, si lo hace
np.linalg.eig(np.matmul(A, np.transpose(A))
(que eseig(AA')
), la operación calculará la transposición en algún lenguaje rápido (C ++ o fortran), lo devolverá a python, lo tomará de python junto con A y calculará una multiplicación en algún lenguaje rápido y lo devolverá a python, luego calcule valores propios y devuélvalo a python. Sin embargo, operaciones costosas como matmul y eig se calculan de manera eficiente, aún así pierde tiempo al mover los resultados a python hacia atrás y forzarlos. TF no lo hace , una vez que definió el gráfico, sus tensores fluyen no en Python sino en C ++ / CUDA / algo más.fuente
Python le permite crear módulos de extensión usando C y C ++, interactuando con código nativo y aún obteniendo las ventajas que Python le brinda.
TensorFlow usa Python, sí, pero también contiene grandes cantidades de C ++ .
Esto permite una interfaz más simple para la experimentación con menos sobrecarga de pensamiento humano con Python, y agrega rendimiento al programar las partes más importantes en C ++.
fuente
La última relación que puede verificar desde aquí muestra dentro de TensorFlow C ++ toma ~ 50% del código, y Python toma ~ 40% del código.
Tanto C ++ como Python son los idiomas oficiales en Google, por lo que no es de extrañar por qué es así. Si tuviera que proporcionar una regresión rápida donde C ++ y Python están presentes ...
C ++ está dentro del álgebra computacional, y Python se usa para todo lo demás, incluidas las pruebas. Sabiendo cuán ubicua es la prueba hoy en día, no es de extrañar por qué el código Python contribuye tanto a TF.
fuente