Что такое TensorFlow? Как он работает? Archiтектура и особенности
⚡ Умное резюме
TensorFlow — это платформа с открытым исходным кодом. Google Разработанная для машинного обучения, эта система представляет каждое вычисление в виде графа потока данных, состоящего из тензоров. В этом обзоре рассматривается архитектура, компоненты, принцип выполнения вычислений и способы передачи данных через входной конвейер.
Что такое ТензорФлоу?
TensorFlow — это комплексная платформа с открытым исходным кодом для создания приложений машинного обучения. Это символическая математическая библиотека, которая использует поток данных и дифференцируемое программирование для выполнения различных задач, направленных на обучение и вывод глубоких нейронных сетей. Он позволяет разработчикам создавать приложения машинного обучения, используя различные инструменты, библиотеки и ресурсы сообщества.
В настоящее время самой известной в мире библиотекой для глубокого обучения является... GoogleTensorFlow. Google Компания применяет машинное обучение во всех своих продуктах для улучшения поиска, перевода, создания подписей к изображениям и рекомендаций.
Пример TensorFlow
Чтобы привести конкретный пример, Google Пользователи могут получить более быстрый и точный поиск благодаря искусственному интеллекту. Если пользователь вводит ключевое слово в строку поиска, Google дает рекомендацию относительно того, какое слово можно было бы использовать следующим.

Google Компания хочет использовать машинное обучение, чтобы извлечь максимальную выгоду из своих огромных массивов данных и предоставить пользователям наилучший опыт. Машинное обучение используют три разные группы:
- Исследователи
- Ученые данных
- Программисты
Все они могут использовать один и тот же набор инструментов для сотрудничества друг с другом и повышения эффективности.
Google TensorFlow не только хранит большие наборы данных, но и использует огромную вычислительную инфраструктуру, поэтому он изначально создавался с расчетом на масштабируемость. TensorFlow — это библиотека, разработанная компанией... Google Команда Brain Team займется ускорением исследований в области машинного обучения и глубоких нейронных сетей.
Он был создан для работы на нескольких процессорах или графических процессорах и даже на мобильных операционных системах, и у него есть несколько оболочек на нескольких языках, таких как Python, C++ or Java.
История TensorFlow
Несколько лет назад глубокое обучение начало превосходить все остальные алгоритмы машинного обучения при обработке огромных объемов данных. Google компания увидела, что может использовать эти глубокие нейронные сети для улучшения своих услуг:
- Gmail
- Фото
- Google Поисковая система
Они создали структуру под названием TensorFlow чтобы исследователи и разработчики могли работать над одной и той же моделью, а затем развернуть ее в масштабе, доступном для использования многими людьми.
TensorFlow был выпущен в открытый доступ в ноябре 2015 года, а версия 1.0 вышла в феврале 2017 года. Гораздо более значительные изменения произошли с... TensorFlow 2.0 вышел в сентябре 2019 года.В результате, немедленное выполнение стало режимом по умолчанию, а Keras был принят в качестве стандартного высокоуровневого API. Начиная с версии 2.16, Keras 3 является версией по умолчанию, и тот же код модели может также работать на JAX или Python.Torбэкэнды ch.
TensorFlow распространяется под лицензией Apache 2.0, поэтому вы можете использовать, модифицировать и распространять его, в том числе в коммерческих целях, без уплаты каких-либо платежей. Google.
Как работает TensorFlow
TensorFlow позволяет вам создавать графики и структуры потоков данных, чтобы определить, как данные перемещаются по графу, принимая входные данные в виде многомерного массива, называемого Tensor. Это позволяет вам построить блок-схему операций, которые можно выполнить с этими входными данными, которые идут на одном конце и приходят на другом конце в качестве выходных данных.
TensorFlow Archiтекстура
Архитектура TensorFlow состоит из трех частей:
- Предварительная обработка данных
- Построить модель
- Обучите и оцените модель
Он называется TensorFlow, потому что принимает на вход многомерный массив, также известный как... тензоры. Вы можете построить своего рода блок-схема операций (называемых графиком), которые вы хотите выполнить с этим входом. Ввод поступает на один конец, затем проходит через эту систему множества операций и выходит на другом конце в качестве вывода.
Где можно запустить TensorFlow?
Требования к аппаратному и программному обеспечению TensorFlow делятся на два этапа:
Стадия разработки: на этом этапе происходит обучение модели, обычно на настольном компьютере или ноутбуке.
Этап выполнения или выводаПосле завершения обучения модель может работать на многих платформах.
- Рабочий стол работает Windows, macOS или Linux
- Облако как веб-сервис
- Мобильные устройства, такие как iOS и Android
Вы можете обучить его на нескольких машинах, а затем запустить на другом компьютере, как только у вас будет обученная модель.
Модель может обучаться и использоваться как на графических процессорах (GPU), так и на центральных процессорах (CPU). Графические процессоры изначально были разработаны для видеоигр. Примерно в 2009 году исследователи из Стэнфорда показали, что графические процессоры чрезвычайно эффективны при выполнении матричных и линейных алгебраических операций, от которых зависят нейронные сети. Глубокое обучение основано на большом количестве матричных умножений. TensorFlow очень быстро вычисляет матричные умножения, потому что он написан на языке программирования... C++. Хотя это реализовано в C++, TensorFlow доступен и управляется в основном с помощью других языков, Python.
Ещё одна важная особенность заключается в следующем: Тензорборд, которая визуализирует график, метрики обучения и распределение весов во время работы модели.
Компоненты TensorFlow
тензор
Название TensorFlow напрямую происходит от его основной структуры: тензорВ TensorFlow все вычисления связаны с тензорами. Тензор — это... вектор or матрица n-мерностей, представляющих все типы данных. Все значения в тензоре содержат идентичный тип данных с известным (или частично известным) формировать. Форма данных — это размерность матрицы или массива.
Тензор может быть создан на основе входных данных или результата вычисления. В TensorFlow все операции выполняются внутри график. Граф представляет собой набор вычислений, которые происходят последовательно. Каждая операция называется операционный узел и связаны друг с другом.
На графике показаны операции и связи между узлами. Однако он не отображает значения. Край узлов — это тензор, т. е. способ заполнения операции данными.
Графики
TensorFlow использует графовую структуру. Граф собирает и описывает все рядовые вычисления, выполненные во время обучения. График имеет массу преимуществ:
- Она работает на нескольких процессорах или видеокартах, и даже на мобильных операционных системах.
- Переносимость графа позволяет сохранять вычисления для немедленного или последующего использования. График можно сохранить для выполнения в будущем.
- Все вычисления в графе выполняются путем соединения тензоров вместе.
- Граф имеет узлы и ребра. Каждый узел выполняет математическую операцию и выдает результат, а ребра описывают взаимосвязи между узлами, отвечающие за ввод и вывод данных. Сами тензоры перемещаются вдоль ребер.
Почему TensorFlow популярен?
TensorFlow широко используется, потому что доступен для пользователей любого уровня подготовки. Его API охватывают все: от трехстрочной модели Keras до созданной вручную сверточной нейронной сети (CNN) или рекуррентной нейронной сети (RNN). Поскольку вычисления представляются в виде графа, TensorBoard позволяет визуализировать сеть и значительно упрощает отладку. Он также масштабируемо развертывается, работая на CPU, GPU и TPU, а также на мобильных устройствах через TensorFlow Lite.
TensorFlow остается одним из двух наиболее часто используемых фреймворков для глубокого обучения на GitHub, наряду с Python.Torглава
TensorFlow Algorithms
TensorFlow поставляется с высокоуровневыми оценщиками для нескольких классических алгоритмов. В TensorFlow 1.x они находились в составе tf.estimator:
- Линейная регрессия: tf.estimator.LinearRegressor
- Классификация: tf.estimator.LinearClassifier
- Классификация глубокого обучения: tf.estimator.DNNClassifier.
- Широкое и глубокое обучение: tf.estimator.DNNLinearCombinedClassifier
- Регрессия на основе бустированных деревьев: tf.estimator.BoostedTreesRegressor
- Усовершенствованная классификация деревьев: tf.estimator.BoostedTreesClassifier.
TensorFlow против PythonTorch: Что вам следует выбрать?
TensorFlow и PythonTorЭто две доминирующие платформы для глубокого обучения, и практические различия между ними значительно сократились с тех пор, как TensorFlow 2.0 перешел на немедленное выполнение.
| Критерии | TensorFlow | PyTorch |
|---|---|---|
| Разработанная | Google Мозг | Мета ИИ |
| Типы | Готовность к работе, с возможностью компиляции графов. | Готовность к работе, с возможностью компиляции. |
| API высокого уровня | Keras, встроенный в | Отдельные библиотеки, такие как Lightning |
| Мобильные устройства и периферийные устройства | Зрелая версия, благодаря TensorFlow Lite | Улучшение через ExecuTorch |
| Развертывание в браузере | TensorFlow.js | Требуется преобразование в ONNX. |
| Типичная крепость | Производство и развертывание | Исследования и эксперименты |
Прагматичный ответ: выбирайте TensorFlow, когда модель должна быть развернута на мобильных устройствах, в браузере или на управляемой платформе обслуживания, и выбирайте Python.Torch при итерации по архитектуре модели. Keras 3, используемый по умолчанию начиная с TensorFlow 2.16, еще больше упрощает этот выбор, поскольку один и тот же код Keras может работать в TensorFlow, JAX или Python.Torбэкэнд ch.
Как работают вычисления в TensorFlow
⚠️ Примечание к версии: В приведенных ниже пошаговых инструкциях используется... ТензорФлоу 1.x Графический и сессионный стиль представления данных — это наиболее наглядный способ увидеть, как на самом деле работает граф потока данных. Функции tf.placeholder(), tf.Session() и make_initializable_iterator() были удалены в TensorFlow 2.0. и вызовет ошибку AttributeError в текущей установке. Раздел TensorFlow 1.x против TensorFlow 2.x Ниже приведён современный эквивалент каждого примера.
import numpy as np import tensorflow as tf
В первых двух строках кода мы импортировали тензорный поток как tf. С Python, общепринятой практикой является использование для библиотеки короткого имени. Преимущество заключается в том, что нам не нужно вводить полное имя библиотеки, когда нам нужно ее использовать. Например, мы можем импортировать тензорный поток как tf и вызывать tf, когда хотим использовать функцию тензорного потока.
Давайте попрактикуемся в элементарном рабочем процессе TensorFlow на простых примерах. Давайте создадим вычислительный граф, который умножает два числа друг на друга.
В примере мы будем перемножать X_1 и X_2. TensorFlow создаст узел для связи с операцией. В нашем примере она называется «умножение». После определения графа вычислительные движки TensorFlow перемножат X_1 и X_2.
Наконец, мы запустим сеанс TensorFlow, который запустит вычислительный граф со значениями X_1 и X_2 и распечатает результат умножения.
Давайте определим входные узлы X_1 и X_2. При создании узла в TensorFlow нам нужно выбрать тип создаваемого узла. Узлы X1 и X2 будут узлами-заполнителями. Заполнитель присваивает новое значение каждый раз, когда мы выполняем вычисления. Мы создадим их как узлы-заполнители типа TF.
Шаг 1. Определите переменную
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
Для заполнителя необходим тип данных. Это числа, поэтому tf.float32 — правильный выбор. Аргумент name необязателен, но полезен, поскольку это метка, которая отображается в визуализации графа в TensorBoard. X_2 определяется аналогично.
Шаг 2: Определите вычисление
multiply = tf.multiply(X_1, X_2, name = "multiply")
Теперь мы можем определить узел, который будет выполнять операцию умножения. В TensorFlow это можно сделать, создав узел tf.multiply.
Мы передадим узлы X_1 и X_2 в узел умножения. Он сообщает тензорному потоку связать эти узлы в вычислительном графе, поэтому мы просим его извлечь значения из x и y и умножить результат. Давайте также дадим узлу умножения имя умножить. Это полное определение нашего простого вычислительного графа.
Шаг 3: Выполните операцию
Для выполнения операций в графе нам необходимо создать сессию. В TensorFlow это делается с помощью tf.Session(). Теперь, когда у нас есть сессия, мы можем запросить у нее выполнение операций над нашим вычислительным графом, вызвав метод session. Для выполнения вычислений нам нужно использовать метод run.
При выполнении операции умножения ей необходимы значения узлов X_1 и X_2, поэтому их нужно передать во время выполнения. Это можно сделать, указав параметр с именем feed_dict. Мы передаем значения 1, 2, 3 для X_1 и 4, 5, 6 для X_2.
Мы печатаем результаты с помощью print(result). Мы должны увидеть 4, 10 и 18 для 1×4, 2×5 и 3×6.
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2") multiply = tf.multiply(X_1, X_2, name = "multiply") with tf.Session() as session: result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]}) print(result)
[ 4. 10. 18.]
Варианты загрузки данных в TensorFlow
Первый шаг перед тренировкой алгоритм машинного обучения Задача состоит в загрузке данных. Существует два распространенных способа загрузки данных:
1. Загрузить данные в памятьЭто самый простой метод. Вы загружаете все свои данные в память как один массив. Вы пишете обычный код. Python В этом отношении ничто из перечисленного не является специфичным для TensorFlow.
2. Конвейер обработки данных TensorFlowTensorFlow предоставляет встроенный API, который загружает данные, применяет преобразования и передает их модели. Этот метод работает очень хорошо, особенно при работе с большими наборами данных. Например, изображения, как известно, имеют огромные размеры и не помещаются в память. Конвейер обработки данных самостоятельно управляет памятью.
Какое решение использовать?
Загрузить данные в память
Если ваш набор данных не слишком велик, т. е. менее 10 гигабайт, вы можете использовать первый метод. Данные могут поместиться в память. Вы можете использовать известную библиотеку Pandas для импорта файлов CSV. Вы узнаете больше о пандах в следующем уроке.
Загрузка данных с помощью конвейера TensorFlow.
Второй метод работает лучше всего, если у вас большой набор данных. Например, если у вас есть набор данных размером 50 гигабайт, а на вашем компьютере всего 16 гигабайт памяти, машина выйдет из строя.
В этой ситуации вам потребуется создать конвейер TensorFlow. Конвейер будет загружать данные пакетами, или небольшими порциями. Каждый пакет будет передаваться в конвейер и готов к обучению. Создание конвейера — отличное решение, поскольку оно позволяет использовать параллельные вычисления. Это означает, что TensorFlow будет обучать модель на нескольких процессорах. Это ускоряет вычисления и делает возможным обучение более крупных нейронных сетей.
Вкратце: загружайте небольшие наборы данных в память с помощью pandas, а когда данные большие или когда требуется параллельная загрузка на нескольких процессорах, используйте конвейер TensorFlow.
Как создать конвейер TensorFlow
Вот шаги по созданию конвейера TensorFlow:
В предыдущем примере мы вручную добавили три значения для X_1 и X_2. Теперь мы рассмотрим, как загрузить данные в TensorFlow:
Шаг 1) Создайте данные
Прежде всего, давайте воспользуемся библиотекой numpy для генерации двух случайных значений.
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
[[0.8835775 0.23766977]]
Шаг 2) Создайте заполнитель
Как и в предыдущем примере, мы создаем заполнитель с именем X. Нам нужно явно указать форму тензора. В этом случае мы загрузим массив только с двумя значениями. Мы можем записать форму как shape=[1,2]
# using a placeholder x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
Шаг 3) Определите метод набора данных
Далее нам нужно определить набор данных, в который мы сможем заполнить значение заполнителя x. Нам нужно использовать метод tf.data.Dataset.from_tensor_slices
dataset = tf.data.Dataset.from_tensor_slices(x)
Шаг 4) Создайте конвейер
На четвертом этапе нам нужно инициализировать конвейер, по которому будут передаваться данные. Нам нужно создать итератор с помощью make_initializable_iterator. Мы называем его итератором. Затем нам нужно вызвать этот итератор для передачи следующего пакета данных get_next. Мы назовем этот шаг get_next. Обратите внимание, что в нашем примере имеется только один пакет данных только с двумя значениями.
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
Шаг 5) Выполните операцию
Последний шаг аналогичен предыдущему примеру. Мы инициируем сеанс и запускаем итератор операции. Мы передаем в Feed_dict значение, сгенерированное NumPy. Эти два значения будут заполнять заполнитель x. Затем мы запускаем get_next, чтобы распечатать результат.
with tf.Session() as sess:
# feed the placeholder with data
sess.run(iterator.initializer, feed_dict={ x: x_input })
print(sess.run(get_next))
[0.8835775 0.23766978]
TensorFlow 1.x против TensorFlow 2.x: что изменилось?
TensorFlow 2.0 представлял собой кардинальную переработку пользовательского API. Понимание этой разницы важно, поскольку большая часть обучающего кода в интернете, включая приведенные выше примеры, ориентирована на стиль версии 1.x.
| Концепция | ТензорФлоу 1.x | ТензорФлоу 2.x |
|---|---|---|
| Модель исполнения | Определите граф, а затем запустите его. | По умолчанию операции выполняются немедленно, в режиме ожидания. |
| Данные о кормлении | tf.placeholder plus feed_dict | Проходить Python значения или тензоры напрямую |
| Выполнение операций | tf.Session().run() | Вызовите функцию, сессия не требуется. |
| API высокого уровня | tf.estimator | Keras, tf.keras |
| Оптимизация графов | Всегда на основе графов | Примените декоратор @tf.function |
| Итерация по набору данных | make_initializable_iterator() | одноцветный Python Цикл for по набору данных |
Пример умножения, переписанный заново. Три шага и сессия объединяются в одну строку, поскольку операция выполняется в момент вызова:
import tensorflow as tf X_1 = tf.constant([1, 2, 3], dtype=tf.float32) X_2 = tf.constant([4, 5, 6], dtype=tf.float32) result = tf.multiply(X_1, X_2, name="multiply") print(result.numpy()) # [ 4. 10. 18.]
Конвейер ввода данных, переписанный. Объекты-заполнители и итераторы не требуются:
import numpy as np import tensorflow as tf x_input = np.random.sample((1, 2)) dataset = tf.data.Dataset.from_tensor_slices(x_input) for batch in dataset: print(batch.numpy())
Если вам нужна скорость скомпилированного графа, оберните функцию в аннотацию `@tf.function` и используйте TensorFlow. tracавтоматически объединяет его в один. Устаревшие скрипты версии 1.x также можно запускать без изменений через пространство имен tf.compat.v1, хотя этот путь предназначен только для обслуживания и не должен использоваться для новых работ.
TensorFlow: основные выводы и Code Референции
- Значение TensorFlow: TensorFlow — самая известная библиотека глубокого обучения за последние годы. Практик, использующий TensorFlow, может построить любую структуру глубокого обучения, например CNN, RNN или простую искусственную нейронную сеть.
- TensorFlow в основном используется в академических кругах, стартапах и крупных компаниях. Google использует TensorFlow практически во всех своих проектах. Google товары повседневного спроса, включая GmailФото и Google Поисковый движок.
- Google Команда Brain разработала TensorFlow, чтобы сократить разрыв между исследователями и разработчиками продуктов. В 2015 году они сделали TensorFlow общедоступным, и его популярность быстро растёт. Сегодня TensorFlow — это библиотека для глубокого обучения с наибольшим количеством репозиториев на GitHub.
- Специалисты используют TensorFlow, потому что он легко развертывается в масштабе, в облаке, в браузере или на мобильных устройствах под управлением iOS. Android.
TensorFlow работает в рамках сессии. Каждая сессия определяется графом с различными вычислениями. Простой пример — умножение на число. В TensorFlow для этого требуется три шага:
- Определите переменную
X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2")
- Определите вычисление
multiply = tf.multiply(X_1, X_2, name = "multiply")
- Выполнить операцию
with tf.Session() as session:
result = session.run(multiply, feed_dict={X_1: [1, 2, 3], X_2: [4, 5, 6]})
print(result)
Один из распространенных методов в TensorFlow — создание конвейера для загрузки данных. Выполнив эти пять шагов, вы сможете загрузить данные в TensorFlow:
- Создайте данные
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
- Создайте заполнитель
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
- Определите метод набора данных
dataset = tf.data.Dataset.from_tensor_slices(x)
- Создайте конвейер
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
- Запустить программу
with tf.Session() as sess:
sess.run(iterator.initializer, feed_dict={x: x_input})
print(sess.run(get_next))

