Что такое ТензорФлоу? Как это работает? Введение и архитектура

Давайте начнем этот урок со знакомства с TensorFlow:

Что такое ТензорФлоу?

TensorFlow — это комплексная платформа с открытым исходным кодом для создания приложений машинного обучения. Это символическая математическая библиотека, которая использует поток данных и дифференцируемое программирование для выполнения различных задач, направленных на обучение и вывод глубоких нейронных сетей. Он позволяет разработчикам создавать приложения машинного обучения, используя различные инструменты, библиотеки и ресурсы сообщества.

В настоящее время самой известной библиотекой глубокого обучения в мире является Google TensorFlow. Продукт Google использует машинное обучение во всех своих продуктах для улучшения поисковой системы, перевода, подписей к изображениям или рекомендаций.

Пример TensorFlow

Приведу конкретный пример: пользователи Google могут получить более быстрый и более точный поиск с помощью ИИ. Если пользователь вводит ключевое слово в строку поиска, Google предлагает рекомендации о том, какое слово может быть следующим.

Пример TensorFlow
Пример TensorFlow

Google хочет использовать машинное обучение, чтобы воспользоваться своими огромными наборами данных и предоставить пользователям лучший опыт. Машинное обучение используют три разные группы:

  • Исследователи
  • Ученые данных
  • Программисты

Все они могут использовать один и тот же набор инструментов для сотрудничества друг с другом и повышения эффективности.

У Google не просто есть данные; у них самый массивный компьютер в мире, поэтому Tensor Flow был создан для масштабирования. TensorFlow — это библиотека, разработанная командой Google Brain для ускорения машинного обучения и глубоких исследований нейронных сетей.

Он был создан для работы на нескольких процессорах или графических процессорах и даже в мобильных операционных системах и имеет несколько оболочек на нескольких языках, таких как Python, C + + or Java.

История TensorFlow

Пару лет назад глубокое обучение начало превосходить все другие алгоритмы машинного обучения при передаче огромных объемов данных. Google увидел, что может использовать эти глубокие нейронные сети для улучшения своих услуг:

  • Gmail
  • Фото
  • Поисковая система Google

Они создают структуру под названием Tensorflow чтобы позволить исследователям и разработчикам вместе работать над моделью ИИ. После разработки и масштабирования он позволяет многим людям использовать его.

Впервые он был обнародован в конце 2015 года, а первая стабильная версия появилась в 2017 году. Он имеет открытый исходный код под лицензией Apache Open Source. Вы можете использовать его, изменять и распространять модифицированную версию за определенную плату, ничего не платя Google.

Далее в этом руководстве по глубокому обучению TensorFlow мы узнаем об архитектуре TensorFlow и о том, как работает TensorFlow.

Как работает TensorFlow

TensorFlow позволяет вам создавать графики и структуры потоков данных, чтобы определить, как данные перемещаются по графу, принимая входные данные в виде многомерного массива, называемого Tensor. Это позволяет вам построить блок-схему операций, которые можно выполнить с этими входными данными, которые идут на одном конце и приходят на другом конце в качестве выходных данных.

Архитектура TensorFlow

Архитектура Tensorflow состоит из трех частей:

  • Предварительная обработка данных
  • Построить модель
  • Обучите и оцените модель

Он называется Tensorflow, потому что принимает входные данные в виде многомерного массива, также известного как тензоры. Вы можете построить своего рода блок-схема операций (называемых графиком), которые вы хотите выполнить с этим входом. Ввод поступает на один конец, затем проходит через эту систему множества операций и выходит на другом конце в качестве вывода.

Вот почему он называется TensorFlow, потому что тензор входит в него, проходит через список операций, а затем выходит на другую сторону.

Где можно запустить Tensorflow?

Аппаратное обеспечение TensorFlow и требования к программному обеспечению можно разделить на

Фаза разработки: на этом этапе вы тренируете режим. Обучение обычно проводится на настольном компьютере или ноутбуке.

Фаза выполнения или фаза вывода: после завершения обучения Tensorflow можно запускать на многих различных платформах. Вы можете запустить его на

  • Рабочий стол под управлением Windows, macOS или Linux
  • Облако как веб-сервис
  • Мобильные устройства, такие как iOS и Android

Вы можете обучить его на нескольких машинах, а затем запустить на другом компьютере, как только у вас будет обученная модель.

Модель можно обучать и использовать как на графических процессорах, так и на процессорах. Графические процессоры изначально были разработаны для видеоигр. В конце 2010 года исследователи из Стэнфорда обнаружили, что графические процессоры также очень хороши в матричных операциях и алгебре, что делает их очень быстрыми для выполнения подобных вычислений. Глубокое обучение основано на умножении матриц. TensorFlow очень быстро выполняет умножение матриц, поскольку написан на C++. Несмотря на то, что TensorFlow реализован на C++, к нему можно получить доступ и управлять им с помощью других языков, в основном Python.

Наконец, важной особенностью TensorFlow является TensorBoard. Тензорборд позволяет графически и визуально отслеживать, что делает TensorFlow.

Компоненты TensorFlow

тензор

Название Tensorflow напрямую связано с его основной структурой: тензор. В Tensorflow все вычисления выполняются с использованием тензоров. Тензор – это вектор or матрица n-мерностей, представляющих все типы данных. Все значения в тензоре содержат идентичный тип данных с известным (или частично известным) формировать. Форма данных — это размерность матрицы или массива.

Тензор может быть создан на основе входных данных или результата вычисления. В TensorFlow все операции выполняются внутри график. Граф представляет собой набор вычислений, которые происходят последовательно. Каждая операция называется операционный узел и связаны друг с другом.

На графике показаны операции и связи между узлами. Однако он не отображает значения. Край узлов — это тензор, т. е. способ заполнения операции данными.

Графики

TensorFlow использует графовую структуру. Граф собирает и описывает все рядовые вычисления, выполненные во время обучения. График имеет массу преимуществ:

  • Это было сделано для работы на нескольких процессорах или графических процессорах и даже на мобильных операционных системах.
  • Переносимость графа позволяет сохранять вычисления для немедленного или последующего использования. График можно сохранить для выполнения в будущем.
  • Все вычисления в графе выполняются путем соединения тензоров вместе.
    • Тензор имеет узел и ребро. Узел выполняет математическую операцию и выдает выходные данные конечных точек. Ребра объясняют отношения ввода/вывода между узлами.

Почему TensorFlow популярен?

TensorFlow — лучшая библиотека из всех, потому что она создана так, чтобы быть доступной каждому. Библиотека Tensorflow включает в себя различные API для создания масштабной архитектуры глубокого обучения, такой как CNN или RNN. TensorFlow основан на вычислении графов; это позволяет разработчику визуализировать построение нейронной сети с помощью Tensorboad. Этот инструмент полезен для отладки программы. Наконец, Tensorflow создан для масштабного развертывания. Он работает на процессоре и графическом процессоре.

Tensorflow пользуется наибольшей популярностью на GitHub по сравнению с другими фреймворками глубокого обучения.

Алгоритмы TensorFlow

Ниже приведены алгоритмы, поддерживаемые TensorFlow:

В настоящее время TensorFlow 1.10 имеет встроенный API для:

  • Линейная регрессия: tf.estimator.LinearRegressor
  • Классификация:tf.estimator.LinearClassifier
  • Классификация глубокого обучения: tf.estimator.DNNClassifier.
  • Очистка и глубокое обучение: tf.estimator.DNNLinearCombinedClassifier
  • Регрессия дерева бустеров: tf.estimator.BoostedTreesRegressor
  • Усовершенствованная классификация деревьев: tf.estimator.BoostedTreesClassifier.

Как работают вычисления в TensorFlow

import numpy as np
import tensorflow as tf

В первых двух строках кода мы импортировали тензорный поток как tf. С Питон, общепринятой практикой является использование для библиотеки короткого имени. Преимущество заключается в том, что нам не нужно вводить полное имя библиотеки, когда нам нужно ее использовать. Например, мы можем импортировать тензорный поток как tf и вызывать tf, когда хотим использовать функцию тензорного потока.

Давайте попрактикуемся в элементарном рабочем процессе Tensorflow на простых примерах TensorFlow. Давайте создадим вычислительный граф, который умножает два числа.

В примере мы перемножим X_1 и X_2 вместе. Tensorflow создаст узел для подключения операции. В нашем примере это называется умножением. Когда граф определен, вычислительные механизмы Tensorflow умножат X_1 и X_2.

Расчеты работают в TensorFlow
Пример TensorFlow

Наконец, мы запустим сеанс 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. Нам также нужно дать этому узлу имя. Это имя появится, когда мы посмотрим на графическую визуализацию нашей модели. Давайте назовем этот узел X_1, передав параметр name со значением X_1, а теперь определим X_2 таким же образом. Х_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, поэтому нам также необходимо ввести значения для 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. Конвейер данных Tensorflow: Tensorflow имеет встроенный 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)) # output [ 0.52374458  0.71968478]
[0.8835775  0.23766978]

Итоги

  • Значение TensorFlow: TensorFlow — самая известная библиотека глубокого обучения за последние годы. Практик, использующий TensorFlow, может построить любую структуру глубокого обучения, например CNN, RNN или простую искусственную нейронную сеть.
  • TensorFlow в основном используется учеными, стартапами и крупными компаниями. Google использует TensorFlow почти во всех повседневных продуктах Google, включая G.mail, фото и поисковая система Google.
  • Команда Google Brain разработала TensorFlow, чтобы заполнить пробел между исследователями и разработчиками продуктов. В 2015 году они обнародовали TensorFlow; это быстро растетwing в популярности. В настоящее время TensorFlow — это библиотека глубокого обучения с наибольшим количеством репозиториев на GitHub.
  • Практики используют Tensorflow, потому что его легко развернуть в масштабе. Он создан для работы в облаке или на мобильных устройствах, таких как iOS и Android.

Tensorflow работает в сеансе. Каждый сеанс определяется графом с различными вычислениями. Простым примером может быть умножение на число. В Tensorflow требуются три шага:

  1. Определите переменную
X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")
  1. Определите вычисление
multiply = tf.multiply(X_1, X_2, name = "multiply")
  1. Выполнить операцию
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:

  1. Создайте данные
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
  1. Создайте заполнитель
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
  1. Определите метод набора данных
dataset = tf.data.Dataset.from_tensor_slices(x)
  1. Создайте конвейер
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
  1. Запустить программу
with tf.Session() as sess:  
sess.run(iterator.initializer, feed_dict={ x: x_input })  
print(sess.run(get_next))