TensorFlow, чому саме питон був обраною мовою?


143

Нещодавно я почав вивчати глибоке навчання та інші методики ML, і я почав шукати рамки, які спрощують процес побудови мережі та навчають її, тоді я знайшов TensorFlow, маючи невеликий досвід у цій галузі, для мене, здається, швидкість - це великий фактор для того, щоб зробити велику систему ML ще більше, якщо працювати з глибоким навчанням, то чому Google вибрав пітон для створення TensorFlow? Чи не було б краще зробити це над мовою, яку можна скласти і не інтерпретувати?

Які переваги використання Python над мовою на зразок C ++ для машинного навчання?


2
Незначна мінливість: Компіляція та інтерпретація не є протилежністю. Крім того, будь-яка мова програмування може бути реалізована за допомогою компілятора або інтерпретатора, або обох. Є чудова відповідь про відмінність програмного забезпечення.
8bittree

Відповіді:


240

Найважливіше, що потрібно усвідомити про TensorFlow, це те, що здебільшого ядро написано не в Python : Він написаний у поєднанні високооптимізованих C ++ та CUDA (мова Nvidia для програмування графічних процесорів). Багато з цього трапляється, в свою чергу, за допомогою використання Eigen (високопродуктивна числова бібліотека C ++ та CUDA) та cuDNN NVidia (дуже оптимізована бібліотека DNN для графічних процесорів NVidia для таких функцій, як згортки ).

Модель TensorFlow полягає в тому, що програміст використовує "деяку мову" (швидше за все, Python!) Для вираження моделі. Ця модель, написана в конструкціях TensorFlow, таких як:

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

насправді не виконується під час запуску Python. Натомість, насправді створено графік потоку даних, який говорить про те, щоб приймати конкретні входи, застосовувати певні операції, надавати результати у вигляді входів для інших операцій тощо. Ця модель виконується швидким кодом C ++, і здебільшого дані, що перебувають між операціями, ніколи не копіюються назад в код Python .

Потім програміст "запускає" виконання цієї моделі, підтягуючи вузли - для навчання, як правило, в Python, і для обслуговування, іноді в Python, а іноді в сирому C ++:

sess.run(eval_results)

Цей один Python (або виклик функції C ++) використовує або внутрішній виклик на C ++, або RPC для розподіленої версії, щоб зателефонувати на сервер C ++ TensorFlow, щоб повідомити його про виконання, а потім скопіювати результати.

Тож, сказавши це, давайте переформулюємо питання: Чому TensorFlow обрав Python як першу добре підтримувану мову для вираження та контролю навчання моделей?

Відповідь на це питання проста: Python, ймовірно , найбільш зручний мову для великого кола науковців даних і машинного навчання фахівців , які також , що легко інтегрувати і мати управління ++ бекенд C, а також будучи взагалі, широко використовується як всередині , так і зовні Google та відкритим кодом. Враховуючи, що для базової моделі TensorFlow продуктивність Python не так важлива, це було природним пристосуванням. Також величезний плюс, що NumPy полегшує попередню обробку в Python - також з високою продуктивністю - перед тим, як подати її в TensorFlow для справді важких для процесора речей.

Існує також маса складності в вираженні моделі, яка не використовується при її виконанні - формулювання висновку (наприклад, якщо ви робите matmul (A, B), яка форма отриманих даних?) Та автоматичне обчислення градієнта . Виявляється, приємно було висловити ті слова в Python, хоча я думаю, що в довгостроковій перспективі вони, ймовірно, перейдуть до бекенду C ++, щоб спростити додавання інших мов.

(Надія, звичайно, є підтримка інших мов в майбутньому для створення і вирази моделі Це вже досить просто запустити висновок з використанням кілька інших мов. - C ++ тепер працює, хто - то з Facebook сприяли Go прив'язок , що ми оглядові в даний час тощо)


1
Як ти визначаєш «умовивід», It's already quite straightforward to run inference using several other languagesбудучи програмістом Prolog, мені просто не підходить; здається, що це слово не на місці.
Гай Кодер

1
Запуск просто переднього проходу моделі. Застосування його до даних проти тренінгу.
28.02.16

Що стосується форми висновку. Я перетворюю деякі нейронні мережі в статично набрану мову лише для використання в навчанні, і набирання качки в Ptyhon, безумовно, робить цю частину коду набагато простішою для запису. З іншого боку, написання Python-коду з видами типів робить його набагато складніше, коли ви навчитеся Ptyhon отримувати типи безпосередньо перед запуском. Я бачу набагато більше помилок часу використання Ptyhon, ніж інша мова, яка є F #. Можливо, варто відзначити, що Дак вводить відповідь.
Гай Кодер

2
Хоча це правда, я думаю, що введення пітона було непрямою причиною. З мов, які зазвичай використовуються в Google --- quora.com/… --- Python - найкраща відповідність для середнього машинного навчання. Єдиним іншим реальним вибором був би C ++ (я не знаю багато людей, які використовують Lua, мовою, яку використовує Факел), а C ++ досить далеко від зони комфорту в області інструментів ML. Багато людей, що проживають в ML, походять з тла матлабу, з нумером все більшої популярності. Написання качок, ймовірно, лежить в основі популярності, звичайно, але це поза моїми рамками.
1616

Дякую, приємне резюме. Хлопець Кодер --- про сенс «умовиводу» у грі дивіться у статті Вікіпедії про статистичні умовиводи . Це індуктивний умовивід на відміну від дедуктивного типу, виконаного Прологом.
Боб Карпентер

35

TF не пишеться в python. Він написаний на C ++ (і використовує високоефективні чисельні бібліотеки та код CUDA ), і ви можете перевірити це, подивившись на їх github . Таким чином, ядро написано не в python, але TF забезпечує інтерфейс для багатьох інших мов ( python, C ++, Java, Go )

введіть тут опис зображення

Якщо ви прийшли з світу аналізу даних, ви можете думати про це як numpy (не написаний в python, але надає інтерфейс для Python) або якщо ви веб-розробник - подумайте про це як про базу даних (PostgreSQL, MySQL, який можна викликати з Java, Python, PHP)


Python frontend (мова, якою люди пишуть моделі в TF) є найпопулярнішою з багатьох причин . На мою думку, головна причина є історичною: більшість користувачів ML вже користуються ним (іншим популярним вибором є R), тому якщо ви не надасте інтерфейс python, ваша бібліотека, ймовірно, приречена на незрозумілість.


Але те, що написано в python, не означає, що ваша модель виконана в python. Навпаки, якщо ви правильно написали свою модель, Python ніколи не виконується під час оцінки графіка TF (за винятком tf.py_func () , який існує для налагодження, і його слід уникати в реальній моделі саме тому, що він виконаний на Сторона Пітона).

Це відрізняється від, наприклад, numpy. Наприклад, якщо ви робите np.linalg.eig(np.matmul(A, np.transpose(A))(що є eig(AA')), операція обчислить транспонування на деякій швидкій мові (C ++ або fortran), поверне його в python, візьме його з python разом з A і обчислить множення на деякій швидкій мові та поверне його до python, потім обчислити власні значення і повернути його в python. Отже, незважаючи на те, що дорогі операції, такі як matmul та eig, обчислюються ефективно, ви все одно втрачаєте час, переміщуючи результати на пітон і назад. TF цього не робить , як тільки ви визначили графік, ваші тензори течуть не в python, а в C ++ / CUDA / щось інше.


У цьому контексті моя публікація в блозі може зацікавити: blog.ephorie.de/why-r-for-data-science-and-not-python
від

4

Python дозволяє створювати модулі розширення за допомогою C і C ++, взаємодіючи з нативним кодом і все-таки отримуючи переваги, які надає Python.

TensorFlow використовує Python, так, але він також містить велику кількість C ++ .

Це дозволяє більш простий інтерфейс для експериментів з меншими людськими помилками з Python, а також додати продуктивність, програмуючи найважливіші частини C ++.


0

Останнє співвідношення, яке ви можете перевірити звідси, показує, що всередині TensorFlow C ++ займає ~ 50% коду, а Python займає ~ 40% коду.

І C ++, і Python є офіційними мовами в Google, тому не дивно, чому це так. Якщо мені доведеться забезпечити швидку регресію, де присутні C ++ і Python ...

C ++ знаходиться всередині обчислювальної алгебри, а Python використовується для всього іншого, включаючи тестування. Знаючи, наскільки всюди є тестування сьогодні, не дивно, чому код Python так багато сприяє TF.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.