Тензор флоу что это

Краткое руководство по Tensorflow

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

Мы рассмотрим три основные темы:

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

Некоторые особенности TensorFlow:

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

Установка TensorFlow

Поскольку для работы с TensorFlow мы будем использовать Python API, полезно знать, что TensorFlow работает как с Python 2.7, так и с Python версии 3.3+. Прежде чем перейти к реальным примерам и концепциям, давайте установим библиотеку. Есть два способа установки:

1) При помощи менеджера пакетов Python, pip:

2) При помощи менеджера пакетов conda (если вы используете Anaconda):

Больше информации по установке вы можете найти в официальной документации TensorFlow.

Мы будем использовать Anaconda для всех примеров в этой статье. Для начала запустим Jupyter Notebook:

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Теперь, когда мы готовы писать код, давайте начнем погружаться в пакет SciPy с некоторыми практическими примерами.

Что такое тензоры?

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

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Как видно из рисунка, тензором можно назвать n-мерный массив, который позволяет нам представлять данные в сложных измерениях. Мы можем рассматривать каждое измерение как отдельный признак в глубоком обучении. Это означает, что тензоры могут стать довольно сложными, когда речь заходит о сложных наборах данных (dataset) с большим количеством признаков.

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

Константы в TensorFlow

TensorFlow позволяет нам для получения результата выполнять алгоритмы машинного обучения при помощи тензоров. С TensorFlow построение и тренировка моделей глубокого обучения становится значительно проще.

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

Когда мы запустим этот пример, мы увидим следующий вывод:

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Почему умножение работает неверно? Это совсем не то, что мы ожидали. Это произошло потому, что операции в TensorFlow выполняются иначе. Для начала, нам нужно создать сессию, а затем выполнить в ней граф вычислений.

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

На этот раз мы создали сессию и выполнили операции графа в сессии. Когда мы запустим этот пример, мы увидим следующий вывод:

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Несмотря на предупреждение от TensorFlow, мы все же получили правильные результаты вычислений.

Операции над тензорами

В последнем примере мы умножили две константы, но в TensorFlow можно выполнять много других операций с отдельными элементами:

Когда речь идет об операциях с отдельными элементами (single-element operations), подразумевается, что даже когда вы передаете массив, операции будут выполняться над каждым элементом этого массива. Например:

Когда мы запустим этот пример, мы увидим следующий вывод:

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Из этого мы можем сделать следующие выводы:

Плейсхолдеры и переменные

В одном из предыдущих разделов мы рассмотрели, как можно использовать константы TensorFlow для построения графов вычислений. Но TensorFlow также позволяет нам передавать входные данные при выполнении, чтобы граф вычислений был динамическим. Это возможно с помощью плейсхолдеров (placeholder) и переменных (variable).

На самом деле плейсхолдеры не содержат никаких данных и просто отмечают места для подстановки «внешних» значений. Допустимые входные данные должны быть предоставлены во время выполнения. При отсутствии входных данных они сгенерируют ошибку.

Согласно официальной документации TensorFlow, плейсхолдер — это обещание подставить значение потом. Вот пример использования плейсхолдеров:

Когда мы запустим этот пример, мы увидим следующий вывод:

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

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

В приведенном выше примере x — это переменная, которой присваивается ее начальное значение и тип данных. Если мы не укажем тип данных, TensorFlow выберет тот тип данных, который может представлять указанное начальное значение. Больше о типах данных в TensorFlow вы можете прочитать здесь.

В отличие от константы, для инициализации всех переменных графа нам нужно вызвать функцию Python:

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

Линейная регрессия с использованием TensorFlow

Здесь m — угловой коэффициент, и здесь — это вектор, представляющий веса (weight). А c — свободный член (точка пересечения с осью y ), и здесь он представляет смещение (bias). Вес и смещение называются параметрами модели.

Линейная регрессия позволяет нам оценивать значения веса и смещения таким образом, чтобы минимизировать функцию стоимости. Наконец, x — это независимая переменная в уравнении, а y — зависимая переменная. А теперь давайте начнем строить линейную модель в TensorFlow:

Здесь мы сделали только то, что объяснили ранее. Давайте подведем итоги:

Когда мы запустим этот пример, мы увидим следующий вывод:

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Этот простой фрагмент кода дает базовое представление о том, как мы можем построить регрессионную модель. Но нам нужно сделать еще несколько шагов, чтобы завершить построенную нами модель:

Функция потерь и валидация модели

Чтобы проверить правильность работы модели, нам нужно измерить степень отклонения полученного выходного значения от ожидаемого. Существуют различные функции потерь, которые можно использовать здесь для проверки, но мы рассмотрим один из наиболее распространенных методов — сумму квадратов ошибок (Sum of Squared Error — SSE).

Уравнение для SSE имеет следующий вид:

E = среднеквадратическая ошибка (Mean Squared error — MSE)

t = полученный результат

у = ожидаемый результат

Теперь давайте напишем фрагмент кода в продолжение последнего фрагмента, чтобы рассчитать значение потерь:

Когда мы запустим этот пример, мы увидим следующий вывод:

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Очевидно, что значение потерь очень низкое для данной модели линейной регрессии.

Заключение

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

Источник

TensorFlow туториал. Часть 1: тензоры и векторы

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

TensorFlow — это ML-framework от Google, который предназначен для проектирования, создания и изучения моделей глубокого обучения. Глубокое обучение — это область машинного обучения, алгоритмы в которой были вдохновлены структурой и работой мозга. Вы можете использовать TensorFlow, чтобы производить численные вычисления. Само по себе это не кажется специфичным, однако эти вычисления производятся с помощью data-flow графов. В этих графах вершины представляют собой математические операции, в то время как ребра представляют собой данные, которые обычно представляются в виде многомерных массивов или тензоров, которые сообщаются между этими ребрами.

Поняли? Название «Tensor Flow» происходит от вычислений, которые нейросеть производит с многомерными данными и тензорами! Буквально — поток тензоров. На данный момент это все, что нужно знать о тензорах, но мы вернемся к ним чуть позже.

TensorFlow туториал познакомит вас с глубоким обучением в интерактивной форме:

Введение в тензоры

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

Плоские векторы

Перед тем, как мы перейдем к плоским векторам, неплохо бы вспомнить о том, что такое вектор. Вектор — это особый вид матрицы, прямоугольный массив с числами. Так как векторы — это упорядоченный набор чисел, то они часто представляются в виде столбцов матриц. Другими словами, вектор — скалярная величина, которой дали направление.

Пример скаляра — “5 метров” или “60 м/с”, тогда как вектор — “5 метров на север” или “60 м/с на восток”.

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

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

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

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

Так что же с плоскими векторами?

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

Чтобы понять, что это значит, рассмотрим пример: пусть есть вектор 2 X 1. Это означает, что вектор принадлежит множеству действительных чисел, которые объединены в пары. Или, иначе говоря, элемент двумерного пространства. В таких случаях вы можете задавать вектор на координатной плоскости, как стрелки или лучи.

Работая на координатной плоскости, вы можете узнать х координату конца луча с началом в (0, 0), посмотрев на первую строчку вектора, а у координату — на вторую.

Замечание: если вы рассматриваете вектор размера 3 X 1, то вы работаете трехмерном пространстве. Здесь вы можете представить вектор как стрелку в трехмерном пространстве, которая обычно задается тремя осями х, у и z.

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

Единичные векторы — векторы длины 1. Двумерные или трехмерные вектора хорошо раскладываются в сумму ортогональных единичных векторов, таких как оси координат.

Тензоры

Плоский вектор — это частный случай тензора. Помните, вектор определялся в прошлом разделе как скаляр, которому задали направление. Тензор же — это математическое представление физической сущности, которая может быть задана величиной и несколькими направлениями.

И так же как вы представляли скаляр одним числом, а трехмерный вектор как тройку чисел, тензор представляется в виде массива 3R чисел в трехмерном пространстве.

R в этой записи отвечает за ранг тензора: в трехмерном пространстве тензор ранга 2 может быть представлен девятью числами. В N-мерном скаляр требует только одного числа, векторы требуют N чисел, а тензоры требуют N^R чисел. Этим объясняется, почему скаляры часто называют тензорами размера 0: у них нет направления, и они могут быть представлены только одним числом.

Видео про тензоры на примере обычных объектов (на английском языке, можно включить перевод на русский в субтитрах):

Можно достаточно легко различать векторы, скаляры и тензоры: скаляры представляются одним числом, векторы — последовательностью чисел, тензоры — массивом чисел.

Что делает тензоры такими особенными, так это комбинация компонентов и базисных векторов: все операция производится над тензорами сохраняют отношения между базисными векторами и компонентами такими же.

В следующей частиустановка TensorFlow и первые шаги.

Источник

Общий взгляд на машинное обучение: классификация текста с помощью нейронных сетей и TensorFlow

Авторизуйтесь

Общий взгляд на машинное обучение: классификация текста с помощью нейронных сетей и TensorFlow

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Разработчики часто говорят: «Хотите изучать машинное обучение, для начала узнайте, как работают алгоритмы». Но мой опыт показывает обратное.

Я считаю, сначала важно увидеть общую картину: как работают приложения. Как только вы поймете это, станет гораздо проще изучать функционирование алгоритмов.

Как же развить интуицию и понять все нюансы машинного обучения? Хороший вариант — создать модель такого обучения. Если опыта написания алгоритмов с нуля пока нет, можно использовать библиотеку, в которой они уже реализованы. Например, TensorFlow.

В этой статье мы создадим модель машинного обучения для классификации текста по категориям и обсудим следующие темы:

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

3–4 декабря, Онлайн, Беcплатно

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

TensorFlow

TensorFlow — это библиотека с открытым кодом для машинного обучения, созданная Google. Название помогает понять, как с ней работать: тензоры являются многомерными массивами, которые текут (flow) через узлы графа.

tf.Graph

Каждое вычисление в TensorFlow представляется как граф потока данных. У него есть два элемента:

Чтобы увидеть, как это все работает, создадим следующий граф потока данных:

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Граф, выполняющий x+y

Теперь определим единицу операции:

У нас есть все элементы графа. Пора его построить:

tf.Session

Объект tf.Session инкапсулирует среду, в которой выполняются объекты Operation и оцениваются объекты Tensor (по крайней мере, так сказано в документации). Чтобы сделать это, необходимо определить, какой граф мы будем использовать в сессии:

Прогнозирующая модель

Теперь, когда вы знаете, как TensorFlow работает, надо создать прогнозирующую модель. Вкратце:

Алгоритм машинного обучения + Данные = Прогнозирующая модель

Процесс построения таков:

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Процесс создания прогнозирующей модели

Как можно заметить, она состоит из алгоритма машинного обучения, «натренированного» на данных. Из них формируется модель прогнозирования, далее выдается соответствующий результат:

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Рабочий процесс прогнозирования

Цель модели, которую мы создадим, будет заключаться в классификации текста по категориям, их можно задать:

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

Мы классифицируем данные по категориям, следовательно, это задача классификации.

Для создания модели используем нейронные сети.

Нейронные сети

Нейронная сеть представляет собой вычислительную модель (способ описания системы с использованием математического языка и его принципов). Эта система скорее самообучающаяся и натренированная, нежели явно запрограммированная.

Нейронные сети имитируют центральную нервную систему человека. У них есть соединенные узлы, которые похожи на наши нейроны:

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Первым нейронным сетевым алгоритмом был перцептрон. Его внутреннюю работу хорошо раскрывает данная статья (обратите внимание на анимации).

Чтобы понять, как работают нейронные сети, построим архитектуру одной из них с помощью TensorFlow. Можете взглянуть на пример такой реализации.

Архитектура нейронной сети

У нашей нейронной сети будет 2 скрытых слоя (надо выбрать, сколько их будет в вашей модели — это часть проектирования архитектуры). Задача каждого скрытого уровня заключается в том, чтобы превратить входные данные во что-то, что мог бы использовать слой вывода.

Первый скрытый слой

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Слой ввода и первый скрытый слой

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

В слое ввода один узел соответствует слову из набора данных. Рассмотрим это чуть позже.

Как объяснено в этой статье, каждый узел (нейрон) умножается на вес, т.е. имеет значение веса. В ходе обучения нейронная сеть регулирует эти показатели, чтобы произвести правильные выходные данные. Сеть также добавляет смещение.

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

Существует много видов функции активации. Используем усеченное линейное преобразование (ReLu). Эта функция определяется следующим образом:

f(x) = max(0,x) [вывод равен x или 0 (ноль), в зависимости от того, что больше]

Второй скрытый слой

Второй скрытый слой делает то же самое, что и первый, но теперь входными данными являются выходные данные первого слоя:

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Первый и второй скрытые слои

Слой вывода

И, наконец, мы добираемся до последнего пункта — слоя вывода. Чтобы получить его результаты, будем использовать унитарное кодирование. Здесь только один бит равен единице, а все остальные — нулевые. Например, мы хотим закодировать три категории: «спорт», «космос» и «компьютерная графика»:

Получим, что число узлов вывода равно числу классов входного набора данных.

Значения слоя вывода умножаются на веса, к ним добавляется смещение, но функция активации уже другая.

Мы хотим пометить каждый текст категорией, между собой они являются взаимоисключающими, т.к. текст не может принадлежать двум категориям одновременно. Чтобы достичь цели, вместо ReLu возьмем функцию Softmax. Она преобразует вывод для каждой категории в значение между 0 и 1, а также проверяет, что сумма всех значений равна 1. Так вывод покажет нам вероятность принадлежности текста к каждой категории:

Теперь у нас есть граф потока данных нейронной сети. Если перевести все в код, то получится примерно следующее:

Обучение нейронной сети

Как показал предыдущий опыт, значения весов обновляются, пока сеть обучается. Теперь разберём процесс в среде TensorFlow.

tf.Variable

Запустим сеть в первый раз с весами, полученными по нормальному распределению:

Сделаем это при помощи TensorFlow, используя метод tf.nn.softmax_cross_entropy_with_logits() (функцию активации softmax), и вычислим среднюю ошибку tf.reduced_mean() :

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

Тензор флоу что это. Тензор флоу что это фото. картинка Тензор флоу что это. смотреть фото Тензор флоу что это. смотреть картинку Тензор флоу что это.

Управление данными

Набором данных, который мы будем использовать (кстати, в нем содержится множество текстов на английском) надо управлять, чтобы передать нейронной сети. Для реализации необходимо сделать две вещи:

Давайте взглянем на код, чтобы понять процесс:

То же самое сделаем с метками (категориями текстов), но теперь будем использовать унитарное кодирование:

Запуск графа и получение результата

Настало время самой ожидаемой части — получения результатов от модели. Для начала давайте взглянем поближе на входной набор данных.

Набор данных

Будем использовать 20 Newsgroups — набор данных, содержащий 18 тысяч постов на 20 тем. Чтобы загрузить такой объем информации, воспользуемся библиотекой scikit-learn. Возьмем только 3 категории: comp.graphics, sci.space и rec.sport.baseball. Scikit-learn работает с двумя подмножествами: одним для обучения, вторым для проверки.

Совет: никогда не смотрите на тестовые данные, это может повлиять на ваши решения при создании модели. Не нужно создавать образец для прогнозирования каких-то конкретных данных, важно сделать модель с хорошим обобщением.

Вот так вы загрузите свои наборы данных:

Тренировка модели

В терминологии нейронных сетей одна эпоха = один передний проход (получение значений вывода) и один обратный проход (обновление весов) всех тренировочных примеров.

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

Как гласит документация TensorFlow:

Плейсхолдер нужен исключительно в качестве цели наполнения. Он не инициализирован и не содержит данных.

Поэтому мы определим заполнители так:

Разобьем тренировочные данные на блоки согласно официальному сайту:

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

Функция get_batches() показывает количество текстов вместе с размером блока. Теперь можно запустить модель:

У нас есть натренированная модель. Чтобы протестировать ее, необходимо создать элементы графа. Будем измерять точность, надо получить индексы спрогнозированного значения и индекс правильного значения, потому что мы используем унитарное кодирование. Затем проверить, равны ли они, и вычислить среднее для всего тестового набора данных:

Вот и все! Мы создали модель с использованием нейронной сети для классификации текстов по категориям. Поздравляю!

Конечный код вы можете посмотреть на странице GitHub.

Примечание: Измените значения, которые мы определили, чтобы посмотреть, как они влияют на тренировочное время и точность модели.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *