Найважливіше, що потрібно усвідомити про 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 прив'язок , що ми оглядові в даний час тощо)