web-dev-qa-db-de.com

TensorFlow, warum war python die gewählte Sprache?

Vor kurzem habe ich angefangen, Deep Learning und andere ML-Techniken zu studieren. Ich habe nach Frameworks gesucht, die den Prozess des Aufbaus eines Netzes vereinfachen, und dann habe ich TensorFlow gefunden, das für mich wenig Erfahrung auf diesem Gebiet hat Ein wichtiger Faktor, um ein großes ML-System noch besser zu machen, wenn Sie mit Deep Learning arbeiten. Warum wurde python von Google für TensorFlow ausgewählt? Wäre es nicht besser, es über eine Sprache zu bringen, die es kann? kompiliert und nicht interpretiert werden?

Was sind die Vorteile von Python gegenüber einer Sprache wie C++ für maschinelles Lernen?

123
Ollegn

Das Wichtigste an TensorFlow ist, dass der Kern ist nicht in Python geschrieben: Er ist in einer Kombination aus hochoptimiertem C++ und CUDA (Nvidias Programmiersprache) geschrieben GPUs). Ein Großteil davon geschieht wiederum mithilfe von Eigen (einer hochleistungsfähigen numerischen C++ - und CUDA-Bibliothek) und NVidias cuDNN (einer sehr optimierten DNN-Bibliothek für NVidia-GPUs , für Funktionen wie Faltungen ).

Das Modell für TensorFlow ist, dass der Programmierer "eine Sprache" (höchstwahrscheinlich Python!) Verwendet, um das Modell auszudrücken. Dieses Modell, geschrieben in den TensorFlow-Konstrukten wie:

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

wird nicht ausgeführt, wenn Python ausgeführt wird. Stattdessen wird ein Datenflussdiagramm erstellt, das besagt, dass bestimmte Eingaben vorgenommen, bestimmte Operationen angewendet und die Ergebnisse wie folgt geliefert werden sollen die Eingaben für andere Operationen usw. Dieses Modell wird mit schnellem C++ - Code ausgeführt, und die zwischen Operationen verlaufenden Daten werden größtenteils nie in Python zurückkopiert Code.

Dann "treibt" der Programmierer die Ausführung dieses Modells an, indem er an Knoten "zieht" - zum Trainieren, normalerweise in Python und zum Servieren, manchmal in Python und manchmal in C++:

sess.run(eval_results)

Dieser Python (oder C++ - Funktionsaufruf) verwendet entweder einen In-Process-Aufruf an C++ oder ein RPC für den Distributed Version, die in den C++ - TensorFlow-Server aufgerufen werden soll, um ihn zur Ausführung aufzufordern, und kopiert dann die Ergebnisse zurück.

Nachdem dies gesagt ist, wollen wir die Frage umformulieren: Warum hat TensorFlow Python als erste gut unterstützte Sprache zum Ausdrücken und Steuern des Trainings von gewählt? Modelle?

Die Antwort darauf ist einfach: Python ist wahrscheinlich the die bequemste Sprache für eine große Anzahl von Datenwissenschaftlern und Experten für maschinelles Lernen, die auch so einfach zu integrieren und zu verwenden ist Sie können ein C++ - Backend steuern und sind gleichzeitig allgemein, sowohl innerhalb als auch außerhalb von Google weit verbreitet und Open Source. Angesichts der Tatsache, dass die Leistung von Python) beim Basismodell von TensorFlow nicht so wichtig ist, war es eine natürliche Übereinstimmung. Es ist auch ein großes Plus, dass NumPy es schafft Einfache Vorverarbeitung in Python - auch mit hoher Leistung - vor dem Einspeisen in TensorFlow für die wirklich CPU-schweren Dinge.

Es ist auch sehr komplex, das Modell auszudrücken, das bei der Ausführung nicht verwendet wird - Forminferenz (z. B. wenn Sie matmul (A, B) ausführen, wie sehen die resultierenden Daten aus?) Und automatisch Gradient Berechnung. Es hat sich als angenehm herausgestellt, diese in Python ausdrücken zu können, obwohl ich denke, dass sie auf lange Sicht wahrscheinlich in das C++ - Backend verschoben werden, um das Hinzufügen weiterer Sprachen zu vereinfachen.

(Die Hoffnung ist natürlich, zukünftig andere Sprachen für das Erstellen und Ausdrücken von Modellen zu unterstützen. Es ist bereits recht einfach, Inferenzen mit mehreren anderen Sprachen durchzuführen - C++ funktioniert jetzt, jemand von Facebook hat dazu beigetragen Go Bindungen, die wir gerade überprüfen, etc.)

210
dga

TF ist nicht in Python geschrieben. Es ist in C++ geschrieben (und verwendet hochperformante numerische Bibliotheken und CUDA Code) und Sie können dies überprüfen, indem Sie sich deren ansehen Github . Also der Kern ist nicht in Python geschrieben aber TF bietet eine Schnittstelle zu vielen anderen Sprachen ( Python, C++, Java, Go )

enter image description here

Wenn Sie aus einer Welt der Datenanalyse stammen, können Sie sich das wie eine Zahl vorstellen (nicht in Python geschrieben, bietet aber eine Schnittstelle zu Python) oder wenn Sie ein Webentwickler sind - stellen Sie sich das als Datenbank vor (PostgreSQL, MySQL, die) kann von Java, Python, PHP aus aufgerufen werden)


Python-Frontend (die Sprache, in der Leute Modelle in TF schreiben) ist aufgrund von vielenGründen am beliebtesten. Meiner Meinung nach ist der Hauptgrund historisch: Die Mehrheit der ML-Benutzer verwendet ihn bereits (eine andere beliebte Option ist R). Wenn Sie also keine Schnittstelle zu Python bereitstellen, ist Ihre Bibliothek höchstwahrscheinlich zum Scheitern verurteilt.


Aber in python geschrieben zu sein, bedeutet nicht, dass Ihr Modell in Python ausgeführt wird. Im Gegenteil, wenn Sie Ihr Modell richtig geschrieben haben, ist Python niemals wird während der Auswertung des TF-Graphen ausgeführt (mit Ausnahme von tf.py_func () , das für das Debugging vorhanden ist und im realen Modell genau deshalb vermieden werden sollte, weil es auf Pythons Seite ausgeführt wird).

Dies unterscheidet sich beispielsweise von Numpy. Wenn Sie beispielsweise np.linalg.eig(np.matmul(A, np.transpose(A)) (das ist eig(AA')) ausführen, berechnet die Operation die Transponierung in einer schnellen Sprache (C++ oder fortran), gibt sie an python zurück und entnimmt sie python zusammen mit A, und berechnen Sie eine Multiplikation in einer schnellen Sprache und geben Sie sie an Python zurück, berechnen Sie dann Eigenwerte und geben Sie sie an Python zurück. Trotzdem werden teure Operationen wie matmul und eig effizient berechnet, und Sie verlieren trotzdem Zeit durch Verschieben der Ergebnisse nach python zurück und erzwingen. TF tut es nicht , sobald Sie den Graphen Ihren Tensoren definiert haben fließen nicht in python aber in C++/CUDA/etwas anderes.

25
Salvador Dali

Mit Python können Sie Erweiterungsmodule mit C und C++ erstellen, die mit nativem Code kommunizieren und dennoch die Vorteile nutzen, die Ihnen Python) bietet.

TensorFlow verwendet Python, aber es enthält auch große Mengen von C++ .

Dies ermöglicht eine einfachere Oberfläche zum Experimentieren mit weniger menschlichem Aufwand mit Python und erhöht die Leistung, indem die wichtigsten Teile in C++ programmiert werden.

4

Das neueste Verhältnis, das Sie überprüfen können, aus hier zeigt, dass TensorFlow C++ ~ 50% des Codes und Python nimmt ~ 40% des Codes ein.

Sowohl C++ als auch Python sind die offiziellen Sprachen bei Google. Es ist also kein Wunder, warum dies so ist. Wenn ich eine schnelle Regression durchführen müsste, wenn C++ und Python sind anwesend...

C++ ist in der Rechenalgebra enthalten und Python wird für alles andere verwendet, auch für das Testen. Wenn man weiß, wie allgegenwärtig das Testen heute ist, ist es kein Wunder, warum Python Code trägt so viel zu TF bei.

0
prosti