TensorFlow, ¿por qué python fue el lenguaje elegido?


Recientemente comencé a estudiar deep learning y otras técnicas de ML, y comencé a buscar marcos que simplificaran el proceso de construir una red y entrenarla, luego encontré TensorFlow, con poca experiencia en el campo, para mí, parece que la velocidad es un gran factor para hacer un gran sistema de ML aún más si se trabaja con deep learning, entonces, ¿por qué Python fue elegido por Google para hacer TensorFlow? ¿No sería mejor hacerlo sobre un lenguaje que puede ser compilado y no interpretado?

¿Cuáles son las ventajas de usar Python sobre un lenguaje como C++ para el aprendizaje automático?

Author: Salvador Dali, 2016-02-28

3 answers

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++ altamente optimizado y CUDA (el lenguaje de Nvidia para programar GPU). Gran parte de eso sucede, a su vez, usando 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 como convoluciones).

El el modelo para TensorFlow es que el programador usa "algún lenguaje" (muy probablemente Python! para expresar el modelo. Este modelo, escrito en las construcciones TensorFlow tales como:

h1 = tf.nn.relu(tf.matmul(l1, W1) + b1)
h2 = ...

No se ejecuta realmente 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 las entradas a otras operaciones, y así sucesivamente. Este modelo es ejecutado por código C++ rápido, y para la mayoría en parte, los datos que van entre operaciones nunca se copian de nuevo al código Python .

Entonces el programador "maneja" la ejecución de este modelo tirando de nodos for para entrenar, generalmente en Python, y para servir, a veces en Python y a veces en C++raw:

sess.run(eval_results)

Este Python (o llamada a función de C++) usa una llamada en proceso a C++ o un RPC para que la versión distribuida llame al servidor TensorFlow de C++ para decirle que se ejecute, y luego copia devuelve los resultados.

Así que, dicho esto, reformulemos la pregunta: ¿Por qué TensorFlow eligió Python como el primer lenguaje bien soportado para expresar y controlar el entrenamiento 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 fácil de integrar y tener el control de un backend de C++, mientras que también es general, ampliamente utilizado tanto dentro y 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 hace que sea fácil hacer preprocesamiento en Python, también con alto rendimiento, antes de alimentarlo a TensorFlow para las cosas verdaderamente pesadas en la CPU.

También hay un montón de complejidad en la expresión del modelo que no se utiliza al ejecutarlo inf inferencia de forma ( por ejemplo, si lo hace matmul (A, B), ¿cuál es la forma de los datos resultantes?) y cálculo automático del gradiente . Resulta que ha sido agradable poder expresarlos en Python, aunque creo que a largo plazo probablemente se moverán al backend de C++ para facilitar la adición de otros lenguajes.

(La esperanza, por supuesto, es apoyar a otros lenguajes en el futuro para crear y expresar modelos. Ya es bastante sencillo ejecutar inferencia usando varios otros lenguajes C C++ funciona ahora, alguien de Facebook contribuyó Ir enlaces que estamos revisando ahora, etc.)

 160
Author: dga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-31 06:32:59

TF no está escrito en python. Está escrito en C++ (y usa bibliotecas numéricas de alto rendimiento y código CUDA) y puedes comprobarlo mirando su github. Así que el núcleo no está escrito en python pero TF proporciona una interfaz a muchos otros lenguajes (python, C++, Java, Go)

introduzca la descripción de la imagen aquí

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 usted es un desarrollador web-piense en ello como una base de datos (PostgreSQL, MySQL, que se puede invocar desde Java, Python, PHP)


Python frontend (el lenguaje en el que la gente escribe modelos en TF) es el más popular debido a muchos 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 proporcionará una interfaz a python, su biblioteca probablemente esté condenada a oscuridad.


Pero estar escrito en python no significa que su modelo se ejecute en python. Por el contrario, si escribiste tu 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 del lado de Python).

Esto es diferente de por ejemplo numpy. Por ejemplo, si haces np.linalg.eig(np.matmul(A, np.transpose(A)) (que es eig(AA')), la operación calculará transponer 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 calculará valores propios y lo devolverá a python. Así que, sin embargo, las operaciones costosas como matmul y eig se calculan de manera eficiente, todavía pierde tiempo al mover los resultados a Python y forzar. TF no lo hace, una vez definido el gráfico sus tensores fluyen no en python sino en C++ / CUDA / algo más.

 15
Author: Salvador Dali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-16 03:44:42

Python le permite crear módulos de extensión utilizando C y C++, interactuando con código nativo, y aún así obtener 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 programando las partes más importantes en C++.

 3
Author: Kupiakos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-28 02:00:08