Недавно я начал изучать глубокое обучение и другие методы машинного обучения, и я начал искать фреймворки, которые упрощают процесс построения сети и ее обучения, затем я нашел TensorFlow, имея небольшой опыт в этой области, для меня скорость - это большой фактор для того, чтобы сделать большую систему машинного обучения еще более эффективной при работе с глубоким обучением, так почему же Google выбрал Python для создания TensorFlow? Разве не лучше было бы сделать это над языком, который можно компилировать и не интерпретировать?
Каковы преимущества использования Python перед таким языком, как C ++, для машинного обучения?
python
c++
machine-learning
tensorflow
Ollegn
источник
источник
Ответы:
Самая важная вещь, которую нужно понять о 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, которые мы сейчас рассматриваем , так далее.)
источник
It's already quite straightforward to run inference using several other languages
Быть программистом на Прологе», это просто мне не подходит; это кажется неуместным словом.TF не написан на питоне. Он написан на C ++ (и использует высокопроизводительные числовые библиотеки и код CUDA ), и вы можете проверить это, посмотрев на их github . Таким образом, ядро написано не на python, а TF предоставляет интерфейс для многих других языков ( python, C ++, Java, Go ).
Если вы пришли из мира анализа данных, вы можете думать об этом как о numpy (не написанном на python, но предоставляющем интерфейс для Python), или, если вы веб-разработчик, подумайте об этом как о базе данных (PostgreSQL, MySQL, которая может быть вызван из Java, Python, PHP)
Интерфейс Python (язык, на котором люди пишут модели в TF) является самым популярным по многим причинам . На мой взгляд, основная причина историческая: большинство пользователей ML уже используют его (еще один популярный выбор - R), поэтому, если вы не предоставите интерфейс для python, ваша библиотека, скорее всего, обречена на безвестность.
Но написание на python не означает, что ваша модель выполняется на python. Напротив, если вы правильно написали свою модель, Python никогда не будет выполняться во время оценки графа TF (за исключением tf.py_func () , который существует для отладки и его следует избегать в реальной модели именно потому, что он выполняется на Сторона Python).
Это отличается от, например, numpy. Например, если вы это сделаете
np.linalg.eig(np.matmul(A, np.transpose(A))
(что естьeig(AA')
), операция будет вычислять транспонирование на каком-то быстром языке (C ++ или fortran), возвращать его на python, брать его из python вместе с A и вычислять умножение на каком-то быстром языке и возвращать его на python, затем вычислить собственные значения и вернуть их в python. Таким образом, несмотря на то, что дорогостоящие операции, такие как matmul и eig, вычисляются эффективно, вы все равно теряете время, перемещая результаты обратно в python и заставляя их. TF не делает этого , как только вы определили график, поток тензоров не в python, а в C ++ / CUDA / что-то еще.источник
Python позволяет создавать модули расширения с использованием C и C ++, взаимодействуя с собственным кодом, и при этом получать преимущества, которые дает Python.
Да, TensorFlow использует Python, но он также содержит большое количество C ++ .
Это позволяет упростить интерфейс для экспериментов с меньшими затратами на человеческое мышление с Python и повысить производительность за счет программирования наиболее важных частей на C ++.
источник
Последнее соотношение, которое вы можете проверить отсюда, показывает, что TensorFlow C ++ занимает ~ 50% кода, а Python занимает ~ 40% кода.
И C ++, и Python являются официальными языками Google, поэтому неудивительно, почему это так. Если бы мне пришлось обеспечить быструю регрессию там, где присутствуют C ++ и Python ...
C ++ находится внутри вычислительной алгебры, а Python используется для всего остального, в том числе для тестирования. Зная, насколько повсеместно тестирование сегодня, неудивительно, почему код Python так много способствует TF.
источник