web-dev-qa-db-fra.com

TensorFlow, pourquoi python la langue choisie?

J'ai récemment commencé à étudier l'apprentissage en profondeur et d'autres techniques de ML, et j'ai commencé à chercher des cadres qui simplifient le processus de création et de formation d'un réseau, puis j'ai découvert TensorFlow, peu expérimenté dans le Un facteur important pour la création d’un système ML encore plus important si vous travaillez en apprentissage en profondeur, alors pourquoi python a-t-il été choisi par Google pour réaliser TensorFlow? Ne vaudrait-il pas mieux survoler un langage qui peut être compilé et non interprété?

Quels sont les avantages d'utiliser Python sur un langage tel que C++ pour l'apprentissage automatique?

123
Ollegn

La chose la plus importante à réaliser à propos de TensorFlow est que, pour l'essentiel, le noyau n'est pas écrit en Python : il est écrit en une combinaison de C++ hautement optimisé et de CUDA (Nvidia langage de programmation des GPU). Une grande partie de cela se produit, à son tour, en utilisant Eigen (une bibliothèque numérique haute performance C++ et CUDA) et la cuDNN de NVidia (une bibliothèque DNN très optimisée pour GPU NVidia , pour des fonctions telles que convolutions ).

Le modèle de TensorFlow est que le programmeur utilise "un langage" (très probablement Python!) Pour exprimer le modèle. Ce modèle, écrit dans les constructions TensorFlow telles que:

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

n'est pas réellement exécuté lorsque le Python est exécuté. Au lieu de cela, ce qui est réellement créé est un graphe de flux de données qui dit de prendre des entrées particulières, d'appliquer des opérations particulières, de fournir les résultats en tant qu'entrées pour d'autres opérations, etc. Ce modèle est exécuté par un code C++ rapide et, pour la plupart, les données échangées entre les opérations ne sont jamais recopiées dans le code Python .

Ensuite, le programmeur "pilote" l'exécution de ce modèle en tirant sur des nœuds - pour la formation, généralement en Python, et pour le service, parfois en Python et parfois en C++ brut:

sess.run(eval_results)

Celui-ci Python (ou appel de fonction C++) utilise un appel in-process en C++ ou un RPC pour que la version distribuée appelle le serveur C++ TensorFlow afin de lui indiquer exécuter, puis recopie les résultats.

Ceci étant dit, reformulons la question: pourquoi TensorFlow a-t-il choisi Python comme premier langage bien supporté pour l'expression et le contrôle de la formation de modèles?

La réponse à cette question est simple: Python est probablement le langage le plus confortable pour un grand nombre de scientifiques de données et d'experts en apprentissage automatique, aussi facile à intégrer avoir le contrôle d'un backend C++, tout en étant général, largement utilisé à la fois dans et en dehors de Google, et open source. Étant donné qu'avec le modèle de base de TensorFlow, les performances de Python ne sont pas si importantes que cela, c'était un choix naturel. C’est également un énorme avantage que NumPy facilite le prétraitement dans Python - également avec des performances élevées - avant de le transmettre à TensorFlow pour une utilisation réellement intensive du processeur des choses.

Il existe également une complexité complexe dans l’expression du modèle qui n’est pas utilisé lors de son exécution - inférence de forme (par exemple, si vous effectuez matmul (A, B), quelle est la forme des données résultantes?) Et automatique gradient calcul. Il a été agréable de pouvoir les exprimer en Python, mais je pense qu’à terme, ils passeront probablement au backend C++ pour faciliter l’ajout d’autres langages.

(L’espoir, bien sûr, est de prendre en charge d’autres langages à l’avenir pour la création et l’expression de modèles. C’est déjà assez simple de faire des inférences en utilisant plusieurs autres langages - C++ fonctionne maintenant, a contribué quelqu'un de Facebook Aller les reliures que nous examinons maintenant, etc.)

210
dga

TF n'est pas écrit en python. Il est écrit en C++ (et utilise des codes numériques très performants bibliothèques et CUDA code) et vous pouvez le vérifier en regardant leur github . Donc le noyau n’est pas écrit en python mais TF fournit une interface avec de nombreux autres langages ( python, C++, Java, Go )

enter image description here

Si vous venez d'un monde d'analyse de données, vous pouvez le penser comme numpy (non écrit en python, mais fournit une interface à Python) ou, si vous êtes un développeur Web, pensez à une base de données (PostgreSQL, MySQL, peut être appelé à partir de Java, Python, PHP)


L’interface Python (la langue dans laquelle les gens écrivent des modèles dans TF) est la plus populaire en raison de plusieursraisons . À mon avis, la raison principale en est historique: la majorité des utilisateurs de ML l'utilisent déjà (un autre choix populaire est R). Si vous ne fournissez pas d'interface pour python, votre bibliothèque est probablement vouée à l'obscurité.


Mais être écrit en python ne signifie pas que votre modèle est exécuté en python. Au contraire, si vous écrivez votre modèle correctement, Python n'est jamais exécuté lors de l'évaluation du graphe TF (sauf de tf.py_func () , qui existe pour le débogage et devrait être évité dans le modèle réel exactement parce qu'il est exécuté du côté de Python).

Ceci est différent de par exemple numpy. Par exemple, si vous faites np.linalg.eig(np.matmul(A, np.transpose(A)) (c'est-à-dire eig(AA')), l'opération calculera transpose dans un langage rapide (C++ ou fortran), le retournera en python, le prendra dans python avec A, calculez une multiplication dans un langage rapide et renvoyez-la en python, puis calculez les valeurs propres et renvoyez-la en python. Ainsi, malgré le calcul efficace des opérations coûteuses telles que matmul et eig, vous perdez encore du temps en déplaçant les résultats vers python back et force. TF ne le fait pas , une fois que vous avez défini le graphe, vos tenseurs ne circulent pas dans python mais dans C++/CUDA/quelque chose d'autre.

25
Salvador Dali

Python vous permet de créer des modules d’extension utilisant C et C++, en s’interfaçant avec du code natif, tout en bénéficiant des avantages que Python vous offre.

TensorFlow utilise Python, oui, mais il contient également de grandes quantités de C++ .

Cela permet une interface plus simple permettant d’expérimenter avec Python une surcharge de temps par la pensée humaine, et d’ajouter des performances en programmant les parties les plus importantes en C++.

4
Alyssa Haroldsen

Le dernier rapport que vous pouvez vérifier à partir de ici s'affiche à l'intérieur de TensorFlow C++ prend environ 50% du code, et Python prend environ 40% du code.

C++ et Python sont les langues officielles de Google. Il n’est donc pas étonnant que ce soit le cas. Si je devais fournir une régression rapide où C++ et Python sont présents ...

C++ est à l'intérieur de l'algèbre de calcul, et Python est utilisé pour tout le reste, y compris pour les tests. Sachant à quel point les tests sont omniprésents aujourd’hui, il n’est pas étonnant que le code Python contribue autant à TF.

0
prosti