TensorFlow, dlaczego python był wybranym językiem?

Niedawno zacząłem studiować deep learning i inne techniki ML i zacząłem szukać frameworków, które upraszczają proces budowania sieci i szkolą ją, a następnie znalazłem TensorFlow, mając niewielkie doświadczenie w tej dziedzinie, dla mnie wydaje się, że szybkość jest dużym czynnikiem dla uczynienia dużego systemu ML jeszcze większym, jeśli pracuje z Deep learning, więc dlaczego python został wybrany przez Google do tworzenia TensorFlow? Czy nie lepiej byłoby przerobić go na język, który można skompilować, a nie interpretowane?

Jakie są zalety używania Pythona nad językiem takim jak C++ do uczenia maszynowego?

Author: Salvador Dali, 2016-02-28

3 answers

Najważniejszą rzeczą do zrozumienia w TensorFlow jest to, że w większości rdzeń nie jest napisany w Pythonie : jest napisany w kombinacji wysoce zoptymalizowanego C++ i CUDA (język Nvidia do programowania GPU). Wiele z nich dzieje się z kolei, używając Eigen (wysokowydajnej biblioteki numerycznej C++ i CUDA) i cuDNN (bardzo zoptymalizowanej biblioteki DNN dla GPU NVidia, dla funkcji takich jak convolutions).

The model dla TensorFlow jest taki, że programista używa "jakiegoś języka" (najprawdopodobniej Pythona!) w celu wyrażenia modelu. Model ten, zapisany w konstrukcjach TensorFlow takich jak:

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

Nie jest wykonywany podczas uruchamiania Pythona. Zamiast tego tworzony jest wykres przepływu danych , który mówi, aby przyjmować określone dane wejściowe, stosować określone operacje, dostarczać wyniki jako dane wejściowe do innych operacji i tak dalej. Ten model jest wykonywany szybkim kodem C++, a dla najbardziej część, dane przechodzące między operacjami nigdy nie są kopiowane z powrotem do kodu Pythona .

W przeciwieństwie do innych języków programowania, w tym języka Pythona, w Pythonie, w C++, w Pythonie, w C++, w Pythonie, w C++, w Pythonie, w C++, w C++, w Pythonie, w C++, w C++, w C++, w C++, w C++, w C++, w C++, w C++.]}
sess.run(eval_results)
[2]}Ten Python (lub wywołanie funkcji C++) używa wywołania w trakcie procesu do C++ lub RPC dla wersji rozproszonej do wywołania na serwerze C++ TensorFlow, aby powiedzieć jej wykonanie, a następnie skopiuje Cofnij wyniki.

W związku z tym, powtórzmy pytanie: dlaczego TensorFlow wybrał Python jako pierwszy dobrze obsługiwany język do wyrażania i kontrolowania treningu modeli?

Odpowiedź na to jest prosta: Python jest prawdopodobnie najbardziej wygodnym językiem dla szerokiego grona analityków danych i ekspertów od uczenia maszynowego, który jest również łatwy do zintegrowania i kontrolowania zaplecza C++, a jednocześnie jest ogólny, szeroko stosowany zarówno wewnątrz i na zewnątrz Google i open source. Biorąc pod uwagę, że w podstawowym modelu TensorFlow wydajność Pythona nie jest aż tak ważna, było to naturalne dopasowanie. Jest to również ogromny plus, że NumPy ułatwia wstępne przetwarzanie w Pythonie - również z wysoką wydajnością-przed przekazaniem go do TensorFlow dla naprawdę ciężkich rzeczy.

Istnieje również wiele złożoności w wyrażaniu modelu, który nie jest używany podczas jego wykonywania -- wnioskowanie kształtu (np. matmul (A, B), jaki jest kształt danych wynikowych?) i automatyczne obliczanie gradientu . Okazuje się, że było miło móc wyrażać je w Pythonie, chociaż myślę, że w dłuższej perspektywie prawdopodobnie przeniosą się do backendu C++, aby ułatwić dodawanie innych języków.

(nadzieja, oczywiście, jest wspieranie innych języków w przyszłości do tworzenia i wyrażania modeli. Już całkiem proste jest uruchamianie wnioskowania przy użyciu kilku innych języków-C++ działa teraz ktoś z Facebook dodałGo wiązania, które teraz recenzujemy, itp.)

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-31 06:32:59

TF nie jest napisany w Pythonie. Jest napisany w C++ (i używa wysokiej wydajności bibliotek numerycznych i kodu CUDA) i możesz to sprawdzić, patrząc na ich github. Tak więc rdzeń nie jest napisany w Pythonie , ale TF zapewnia interfejs do wielu innych języków (python, C++, Java, Go )

Tutaj wpisz opis obrazka

Jeśli pochodzisz ze świata analizy danych, możesz myśleć o tym jak numpy (nie jest napisany w Pythonie, ale zapewnia interfejs do Pythona) lub jeśli jesteś web-developerem-pomyśl o nim jako o bazie danych (PostgreSQL, MySQL, które mogą być wywoływane z Javy, Pythona, PHP)


Nakładka Pythona (język, w którym ludzie piszą modele w TF) jest najbardziej popularna ze względu na Wiele uzasadnienie . Moim zdaniem główny powód jest historyczny: większość użytkowników ML już z niego korzysta (innym popularnym wyborem jest R) więc jeśli nie dostarczysz interfejsu do Pythona, twoja Biblioteka jest najprawdopodobniej skazana na ciemność.


Ale pisanie w Pythonie nie oznacza, że twój model jest wykonywany w Pythonie. Wręcz przeciwnie, jeśli napisałeś swój model we właściwy sposób, Python nigdy nie jest wykonywany podczas oceny wykresu TF (z wyjątkiem TF. py_func () , która istnieje do debugowania i powinna być unikana w rzeczywistym modelu dokładnie dlatego, że jest wykonywana po stronie Pythona).

Różni się to od np. numpy. Na przykład jeśli wykonasz np.linalg.eig(np.matmul(A, np.transpose(A)) (czyli eig(AA')), Operacja obliczy transpozycję w jakimś szybkim języku (C++ lub fortran), zwróci ją do Pythona, pobierze ją z Pythona razem z A, i obliczy mnożenie w jakimś szybkim języku i zwróci je do Pythona, a następnie obliczy wartości własne i zwróci je do Pythona. Mimo to kosztowne operacje, takie jak matmul i eig, są obliczane wydajnie, nadal tracisz czas, przenosząc wyniki do Pythona z powrotem i siłą. TF tego nie robi, Po zdefiniowaniu grafu Twoje tensory przepływają Nie w Pythonie ale w C++ / CUDA / coś jeszcze.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-16 03:44:42

Python pozwala na tworzenie modułów rozszerzeń przy użyciu C i C++, łączących się z natywnym kodem, i wciąż zyskując zalety, które daje Python.

TensorFlow używa Pythona, tak, ale zawiera również duże ilości C++.

Pozwala to na prostszy interfejs do eksperymentowania z mniej ludzkimi myślami w Pythonie i dodaje wydajność poprzez programowanie najważniejszych części w 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-28 02:00:08