TensorFlow, pourquoi python la langue choisie?
J'ai récemment commencé à étudier l'apprentissage en profondeur et d'autres techniques de blanchiment d'argent, et j'ai commencé à la recherche pour cadres qui simplifient le processus de construction d'un net et de la formation, puis j'ai trouvé TensorFlow, ayant peu d'expérience dans le domaine, pour moi, il semble que la vitesse est un facteur important pour faire un big ML système encore plus si l'on travaille avec l'apprentissage en profondeur, alors pourquoi python a été choisi par Google pour faire TensorFlow? Ne serait-il pas préférable de le faire sur une langue qui peut être compilé et pas interprété?
Quels sont les avantages de l'utilisation de Python sur un langage comme C++ pour l'apprentissage de la machine?
- Mineur pinaille: la Compilation et l'interprétation ne sont pas opposés. En outre, tous les langages de programmation peuvent être mis en œuvre avec un compilateur ou un interpréteur, ou les deux. Il y a une belle répondre à propos de la distinction plus sur l'Ingénierie du Logiciel.
Vous devez vous connecter pour publier un commentaire.
La chose la plus importante à réaliser sur la TensorFlow est que, pour la plupart, le noyau n'est pas écrit en Python: Il est écrit en une combinaison de C++ optimisé et CUDA (Nvidia de la langue pour la programmation des Gpu). Beaucoup de ce qui se passe, à son tour, en utilisant Eigen (haute-performance C++ et CUDA numérique de la bibliothèque) et NVidia cuDNN (un très optimisé DNN de la bibliothèque pour NVidia Gpu, pour des fonctions telles que circonvolutions).
Le modèle pour TensorFlow est que le programmeur utilise des "langues" (le plus probable Python!) pour exprimer le modèle. Ce modèle, écrit dans le TensorFlow des constructions telles que:
n'est pas exécuté lorsque le Python est exécuté. Au lieu de cela, ce est en fait créé est un graphe de flux de données qui nous a dit de prendre certaines entrées, appliquer des opérations particulières, fournir les résultats que sur les contributions à d'autres opérations, et ainsi de suite. Ce modèle est exécuté par la rapidité de code C++, et pour la plupart, les données entre les opérations n'est jamais recopié le code Python.
Le programmeur "lecteurs" l'exécution de ce modèle en tirant sur les nœuds -- pour la formation, généralement en Python, et pour servir, parfois en Python et parfois en raw C++:
Ce un Python (ou C++ appel de fonction) utilise un processus d'appel à C++ ou un RPC pour la version distribuée d'appel dans le C++ TensorFlow serveur de dire ce qu'il exécute, puis retour des copies des résultats.
Donc, avec cela dit, nous allons reformuler la question: Pourquoi avez-TensorFlow choisir Python comme la première langue prise en charge d'expression et de contrôle de la formation de modèles?
La réponse est simple: Python est probablement la plus confortables langue pour un large éventail de données scientifiques et d'apprentissage de la machine experts c'est aussi facile de s'intégrer et d'avoir le contrôle d'une C++ en arrière-plan, tout en étant général, largement utilisé à la fois à l'intérieur et à l'extérieur de Google et l'open source. Étant donné que le modèle de base de TensorFlow, les performances de Python n'est pas si important que cela, il a été un choix naturel. C'est aussi un énorme plus que NumPy le rend facile à faire pré-traitement en Python -- aussi avec la haute performance -- avant de le donner à TensorFlow pour la vraiment de l'UC-des choses lourdes.
Il y a aussi un tas de complexité dans l'expression du modèle qui n'est pas utilisée lors de l'exécution d'il -- forme d'inférence (par exemple, si vous ne matmul(A, B), quelle est la forme des données qui en résultent?) et automatique dégradé calcul. Il s'avère avoir été agréable d'être en mesure d'exprimer ces en Python, mais je pense que dans le long terme, ils vont probablement se déplacer vers le C++ backend pour faire l'ajout d'autres langues plus facilement.
(L'espoir, bien sûr, est à l'appui d'autres langues dans le futur de créer et d'exprimer des modèles. C'est déjà assez simples à exécuter inférence à l'aide de plusieurs autres langues -- C++ fonctionne maintenant, quelqu'un de Facebook ont contribué Aller liaisons que nous examinons maintenant, etc.)
It's already quite straightforward to run inference using several other languages
Être un Prologue programmeur, ce n'est pas pour moi, on dirait un mot de place.TF n'est pas écrit en python. Il est écrit en C++ (et utilise de haute performance numérique les bibliothèques et CUDA code) ou vous pouvez vérifier cela en regardant leurs github. Donc le noyau n'est pas écrit en python mais TF fournir une interface pour de nombreuses autres langues (python, C++, Java, rendez-vous)
Si vous venez à partir d'une analyse des données du monde, vous pouvez penser comme numpy (pas écrit en python, mais fournit une interface Python) ou si vous êtes un développeur web - pensez-y comme une base de données (PostgreSQL, MySQL, qui peut être invoqué à partir de Java, Python, PHP)
Python frontend (la langue dans laquelle les gens écrivent des modèles TF) est le plus populaire en raison de de nombreux raisons. À mon avis, la principale raison est historique: la majorité de ML utilisateurs utilisent déjà (un autre choix populaire est le R), donc si vous ne fournissez une interface python, votre bibliothèque est probablement vouée à l'obscurité.
Mais étant écrit en python ne signifie pas que votre modèle est exécuté en python. Au contraire, si vous avez écrit votre modèle dans le droit chemin Python n'est jamais exécutée lors de l'évaluation de la TF graphique (à l'exception de tf.py_func(), qui n'existe que pour le débogage et devrait être évitée dans un modèle réel, précisément parce qu'il est exécuté sur Python côté).
Ce qui est différent de par exemple numpy. Par exemple, si vous ne
np.linalg.eig(np.matmul(A, np.transpose(A))
(qui esteig(AA')
), l'opération permettra de calculer les transposer dans un fast langage (C++ ou fortran), il retourne à python, le prendre à partir de python avec Un, et de calculer une multiplication dans certains rapide de la langue et de la renvoyer à python, puis calculer les valeurs propres et le retourner à python. Si néanmoins des opérations coûteuses comme matmul et du gie sont calculés de manière efficace, vous avez encore de perdre du temps en déplaçant les résultats de python de retour et en force. TF ne pas le faire, une fois que vous avez défini le graphique de votre tenseurs flux pas en python, mais en C++/CUDA/quelque chose d'autre.Python vous permet de créer des modules d'extension à l'aide de C et de C++, de l'interfaçage avec du code natif, et encore obtenir les avantages que Python vous donne.
TensorFlow utilise Python, oui, mais il contient également de grandes quantités de C++.
Cela permet une interface plus simple pour l'expérimentation avec de moins en moins humain-pensée en tête avec Python, et ajouter de la performance par la programmation les parties les plus importantes en C++.
Le dernier rapport que vous pouvez consulter à partir de ici montre à l'intérieur de TensorFlow C++ prend ~50% de code, et Python prend environ 40% du code.
C++ et Python sont les langues officielles de Google, donc il n'est pas étonnant pourquoi il en est ainsi. Si j'aurais à fournir rapidement de régression où C++ et Python sont présents...
C++ est à l'intérieur du calcul de l'algèbre, et Python est utilisé pour tout le reste, y compris pour les tests. Savoir comment omniprésent, le test est aujourd'hui, il n'est pas étonnant pourquoi le code Python qui contribue beaucoup à TF.