Ich habe vor kurzem angefangen, Deep Learning und andere ML-Techniken zu studieren, und ich habe angefangen, nach Frameworks zu suchen, die den Prozess des Aufbaus und Trainings eines Netzes vereinfachen. Dann habe ich festgestellt, dass TensorFlow, der wenig Erfahrung auf diesem Gebiet hat, für mich Geschwindigkeit ist 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 schaffen, die kompiliert und nicht interpretiert werden kann?
Was sind die Vorteile der Verwendung von Python gegenüber einer Sprache wie C ++ für maschinelles Lernen?
python
c++
machine-learning
tensorflow
Ollegn
quelle
quelle
Antworten:
Das Wichtigste an TensorFlow ist, dass der Kern größtenteils nicht in Python geschrieben ist : Er ist in einer Kombination aus hochoptimiertem C ++ und CUDA (Nvidias Sprache für die Programmierung von GPUs) geschrieben. Vieles davon geschieht wiederum durch die Verwendung von Eigen (eine hochleistungsfähige numerische C ++ - und CUDA-Bibliothek) und NVidias cuDNN (eine sehr optimierte 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, das in den TensorFlow-Konstrukten geschrieben wurde, wie z.
wird nicht ausgeführt, wenn Python ausgeführt wird. Stattdessen wird tatsächlich ein Datenflussdiagramm erstellt , das besagt, dass bestimmte Eingaben vorgenommen, bestimmte Operationen angewendet, die Ergebnisse als Eingaben für andere Operationen bereitgestellt werden sollen usw. Dieses Modell wird von schnellem C ++ - Code ausgeführt, und die zwischen den Operationen liegenden Daten werden größtenteils nie wieder in den Python-Code kopiert .
Dann "steuert" der Programmierer die Ausführung dieses Modells durch Ziehen an Knoten - zum Trainieren, normalerweise in Python, und zum Servieren, manchmal in Python und manchmal in rohem C ++:
Dieser eine Python- (oder C ++ - Funktionsaufruf) verwendet entweder einen In-Process-Aufruf von C ++ oder einen RPC, damit die verteilte Version den C ++ TensorFlow-Server aufruft, um ihn zur Ausführung aufzufordern, und kopiert dann die Ergebnisse zurück.
Nachdem dies gesagt ist, lassen Sie uns die Frage umformulieren: Warum hat TensorFlow Python als erste gut unterstützte Sprache ausgewählt, um das Training von Modellen auszudrücken und zu steuern?
Die Antwort darauf ist einfach: Python ist wahrscheinlich die komfortabelste Sprache für eine Vielzahl von Datenwissenschaftlern und Experten für maschinelles Lernen. Sie ist auch so einfach zu integrieren und hat die Kontrolle über ein C ++ - Backend, ist aber sowohl innen als auch außen allgemein verbreitet von Google und Open Source. Angesichts der Tatsache, dass mit dem Grundmodell von TensorFlow die Leistung von Python nicht so wichtig ist, war dies eine natürliche Anpassung. Es ist auch ein großes Plus, dass NumPy es einfach macht, die Vorverarbeitung in Python durchzuführen - auch mit hoher Leistung -, bevor es TensorFlow für die wirklich CPU-schweren Dinge zugeführt wird.
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 ist die Form der resultierenden Daten?) Und automatische Gradientenberechnung . Es hat sich als schön herausgestellt, diese in Python ausdrücken zu können, obwohl ich denke, dass sie langfristig wahrscheinlich in das C ++ - Backend wechseln werden, um das Hinzufügen anderer Sprachen zu vereinfachen.
(Die Hoffnung besteht natürlich darin, in Zukunft andere Sprachen beim Erstellen und Ausdrücken von Modellen zu unterstützen. Es ist bereits recht einfach, Inferenzen mit mehreren anderen Sprachen auszuführen. C ++ funktioniert jetzt, jemand von Facebook hat Go- Bindungen beigesteuert , die wir gerade überprüfen , etc.)
quelle
It's already quite straightforward to run inference using several other languages
als Prolog-Programmierer? Es passt einfach nicht zu mir. es scheint wie ein Wort fehl am Platz.TF ist nicht in Python geschrieben. Es ist in C ++ geschrieben (und verwendet leistungsstarke numerische Bibliotheken und CUDA- Code). Sie können dies überprüfen, indem Sie sich den Github ansehen . Also der Kern nicht in Python geschrieben ist , sondern TF bieten eine Schnittstelle zu vielen anderen Sprachen ( Python, C ++, Java, Go )
Wenn Sie aus einer Welt der Datenanalyse stammen, können Sie sich das wie Numpy vorstellen (nicht in Python geschrieben, bietet aber eine Schnittstelle zu Python) oder wenn Sie ein Webentwickler sind - denken Sie an eine Datenbank (PostgreSQL, MySQL, die kann von Java, Python, PHP aus aufgerufen werden)
Python-Frontend (die Sprache, in der Leute Modelle in TF schreiben) ist aus vielen Gründen am beliebtesten . Meiner Meinung nach ist der Hauptgrund historisch: Die Mehrheit der ML-Benutzer verwendet es bereits (eine andere beliebte Wahl ist R). Wenn Sie also keine Schnittstelle zu Python bereitstellen, ist Ihre Bibliothek höchstwahrscheinlich zur Dunkelheit verurteilt.
In Python geschrieben zu sein bedeutet jedoch nicht, dass Ihr Modell in Python ausgeführt wird. Im Gegenteil, wenn Sie Ihr Modell richtig geschrieben haben, wird Python während der Auswertung des TF-Diagramms niemals ausgeführt (mit Ausnahme von tf.py_func () , das zum Debuggen vorhanden ist und im realen Modell genau deshalb vermieden werden sollte, weil es am ausgeführt wird Pythons Seite).
Dies unterscheidet sich beispielsweise von numpy. Wenn Sie dies beispielsweise tun
np.linalg.eig(np.matmul(A, np.transpose(A))
(was isteig(AA')
), berechnet die Operation die Transponierung in einer schnellen Sprache (C ++ oder fortran), gibt sie an Python zurück, nimmt sie zusammen mit A aus Python und berechnet eine Multiplikation in einer schnellen Sprache und gibt sie an zurück Python, berechnen Sie dann die Eigenwerte und geben Sie sie an Python zurück. Trotzdem werden teure Operationen wie matmul und eig effizient berechnet. Sie verlieren dennoch Zeit, wenn Sie die Ergebnisse auf Python zurück verschieben und erzwingen. TF macht das nicht , sobald Sie den Graphen definiert haben, fließen Ihre Tensoren nicht in Python, sondern in C ++ / CUDA / etwas anderem.quelle
Mit Python können Sie Erweiterungsmodule mit C und C ++ erstellen, die mit nativem Code verbunden sind und dennoch die Vorteile von Python nutzen.
TensorFlow verwendet zwar Python, enthält aber auch große Mengen an C ++ .
Dies ermöglicht eine einfachere Schnittstelle zum Experimentieren mit weniger menschlichem Aufwand mit Python und erhöht die Leistung durch Programmieren der wichtigsten Teile in C ++.
quelle
Das neueste Verhältnis, das Sie hier überprüfen können, zeigt, dass in TensorFlow C ++ ~ 50% des Codes und in Python ~ 40% des Codes benötigt werden.
Sowohl C ++ als auch Python sind die offiziellen Sprachen bei Google. Kein Wunder, warum dies so ist. Wenn ich eine schnelle Regression bereitstellen müsste, wenn C ++ und Python vorhanden sind ...
C ++ befindet sich in der Computeralgebra, und Python wird für alles andere verwendet, einschließlich für das Testen. Wenn man weiß, wie allgegenwärtig das Testen heute ist, ist es kein Wunder, warum Python-Code so viel zu TF beiträgt.
quelle