placeholder tensorflow что это

Введение в машинное обучение с tensorflow

Если мы в ближайшие пять лет построим машину с интеллектуальными возможностями одного человека, то ее преемник уже будет разумнее всего человечества вместе взятого. Через одно-два поколения они попросту перестанут обращать на нас внимание. Точно так же, как вы не обращаете внимания на муравьев у себя во дворе. Вы не уничтожаете их, но и не приручаете, они практически никак не влияют на вашу повседневную жизнь, но они там есть.
Сет Шостак

Введение.

Серия моих статей является расширенной версией того, что я хотел увидеть когда только решил познакомиться с нейронными сетями. Он рассчитан в первую очередь на программистов, желающих познакомится с tensorflow и нейронными сетями. Уж не знаю к счастью или к сожалению, но эта тема настолько обширна, что даже мало-мальски информативное описание требует большого объёма текста. Поэтому, я решил разделить повествование на 4 части:

Установка tensorflow

Хотя описание процесса установки tensorflow и не является целью статьи, я вкратце опишу процесс установки cpu-версии для 64-разрядных windows систем и дополнений, используемых далее в тексте. В общем случае процедуру установки можно посмотреть на сайте tensorflow.

Знакомство с tensorflow

Принципы работы с tensorflow достаточно просты. Мы должны составить граф операций, затем передать в этот граф данные и дать команду произвести вычисления. На картинке ниже вы можете увидеть 3 примера таких графов:
placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это
Граф слева содержит только одну вершину, представляющую константу со значением 1. Здесь и далее по тексту, в таких иллюстрациях, кругами с серой штриховкой будут обозначаться вершины с константами, а без штриховки вершины с операциями. Центральный граф иллюстрирует операцию сложения. Если мы попросим tensorflow вычислить значение вершины, представляющей операцию сложения, то он вычислит значения направленных в него рёбер графа и просуммирует их(т.е. будет возвращено 3). На правом же графе у нас две вершины с операциями — вычитание и возведение в квадрат. Если мы попытаемся вычислить вершину, представляющую возведение в квадрат, то tensorflow сперва выполнит вычитание. Я думаю концепция графов вычислений ни у кого затруднений не вызовет.

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

Передача данных и выполнение операций происходят в сессиях. Запуск сессии осуществляется вызовом tf.Session, а её закрытие вызовом метода close на объекте сессии. Можно использовать конструкцию with, которая автоматический закрывает сессию:

Надеюсь про графы и сессии в общих чертах ясно, подробно их функционал тут разбираться не будет, тем кто хочет досконально разобрать эти механизмы стоит ознакомится непосредственно с документацией. А далее мы переходим к построению графов. В предыдущих примерах в граф добавлялись константы и настало время узнать что это такое и чем они отличаются от placeholder’ов и переменных. В примере ниже построен более сложный граф, представляющий выражение placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это.

Итак, placeholder — это узел, через который в модель будут передаваться новые данные, а переменная(Variable) — это узел, который может изменяться по ходу выполнения графа. Я надеюсь, что вышеописанный материал всем понятен, т.к. его как раз достаточно для того, чтобы приступить к обучению первой модели. В предыдущем фрагменте кода мы составили граф линейной функции placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это, теперь же давайте пойдём немного дальше и аппроксимируем функцию placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что этопо набору точек. Да, я знаю, что всех уже задолбала эта задача, как и распознование символов и ещё ряд клишейных примеров, но смиритесь, вам предстоит пройти через всех них…

Первый обучающий алгоритм

Чтобы tensorflow мог обучать модель нам нужно добавить ещё 2 вещи: функцию потерь и сам алгоритм оптимизации.

Функция потерь — это функция, которая принимает значение функции предсказанное моделью и фактическое значение, а возвращает расстояние между ними(будем называть это значение ошибкой). Например, если мы предсказываем вещественное значение, то в качестве функции потерь можно взять квадрат разности аргументов или модуль их разности. Если у нас задача классификации, то функция потерь может возвращать 0 при правильном ответе и 1 при ошибках. Грубо говоря, функция потерь должна вернуть неотрицательное вещественное число и оно должно быть тем больше, чем сильнее модель ошибается и тогда задача обучения модели сведётся к минимизации. И хотя последнее предложение не совсем корректно, зато в полной мере отражает идею машинного обучения.

Из методов оптимизации мы рассмотрим только классический градиентный спуск. Про него написано уже очень много, поэтому я не буду разбирать его «по кирпичику» и вдаваться в детали(материал и так выходит не маленький). Однако его нужно понимать, поэтому постараюсь коротко и наглядно объяснить метод при помощи визуализаций. Ниже представлены 2 варианта одного и того же графика — placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это. Задача метода — найти локальный минимум, т.е. из точки(взятой наугад, на графике placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это) попасть в углубление (синяя зона на графиках).

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это
placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

Суть метода в том, чтобы идти в направлении противоположном градиенту функции в текущей точке. Градиент — это вектор, который указывает в направлении наибольшего роста функции. Математически это вектор из производных по всем аргументам — placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это. Функция взята наугад и вычисления на ней мы проводить не станем, для практики у нас есть более простой пример, для начала посмотрите на визуализацию нескольких шагов алгоритма:

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

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

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

Наш граф выглядит примерно так:
placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это
зелёным выделены входные узлы, а красным оптимизируемые переменные.

Первое, что должно броситься в глаза, это несовпадение размерностей у входных узлов с переменными. Входные узлы принимают массивы по 5 элементов, а переменные являются числами. Это называется пакетными вычислениями(broadcasting). Грубо говоря, когда нужно произвести вычисления над массивами, один из которых имеет лишнее измерение, вычисления производятся отдельно для каждого элемента бОльшего массива и результатом будет массив бОльшей размерности. Т.е. [1,2,3,4,5] + 1 = [2,3,4,5,6], это довольно сложно сформулировать, но должно быть интуитивно понятно.

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

далее полученные значения вычитаются из эталонных, возводятся в квадрат и вычисляется среднее значение:

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

отличие примерно в сотую от выведенного в лог значения вызвана округлением до сотых во время расчётов. Итак, ошибку мы посчитали, теперь пришло время разобраться с оптимизацией. На изображении графа выше, пунктирными стрелками, показано что оптимизатор изменяет переменные. У вас уже должно быть интуитивное понимание того, как работает градиентный спуск. В этом примере используется стохастический градиентный спуск со скоростью 0.5. Давайте по порядку, мы оптимизируем переменные a и b, так что по ним и находим градиент:

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

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

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

Ну и, наконец, меняем значения оптимизируемых переменных с учётом заданной скорости:

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

Значения placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что этои placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что этои есть искомые значения переменных. Эти вычисления повторяются в цикле на каждом наборе точек. Почему такой метод называется стохастическим? Потому что мы вычисляем градиент только на небольшом фрагменте данных(пакете), а не на всех точках сразу. Таким образом стохастический спуск требует гораздо меньше вычислений, но не гарантирует уменьшение ошибки на каждой итерации. Как ни странно этот «шум» в величине сходимости по времени может оказаться даже полезен, т.к. позволяет «выкорабкиваться» из локальных минимумов.

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

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

Источник

Placeholders

This example works a little differently from our previous ones, let’s break it down.

Then, we create a Tensor called, which is the operation of multiplying x by 2. Note that we haven’t defined any initial values for x yet.

We now have an operation ( y ) defined, and can now run it in a session. We create a session object, and then run just the y variable. Note that this means, that if we defined a much larger graph of operations, we can run just a small segment of the graph. This subgraph evaluation is actually a bit selling point of TensorFlow, and one that isn’t present in many other libraries that do similar things.

Placeholders do not need to be statically sized. Let’s update our program to allow x to take on any length. Change the definition of x to be:

Placeholders can also have multiple dimensions, allowing for storing arrays. In the following example, we create a 3 by 2 matrix, and store some numbers in it. We then use the same operation as before to do element-wise doubling of the numbers.

We can extend this to take an arbitrary number of None dimensions. In this example, we load up the image from our last lesson, then create a placeholder that stores a slice of that image. The slice is a 2D segment of the image, but each “pixel” has three components (red, green, blue). Therefore, we need None for the first two dimensions, but need 3 (or None would work) for the last dimension. We then use TensorFlow’s slice method to take a subsegment out of the image to operate on.

1) Take a look at the other functions for arrays in TensorFlow at the official documentation.

2) Break the image apart into four “corners”, then stitch it back together again.

3) Convert the image into grayscale. One way to do this would be to take just a single colour channel and show that. Another way would be to take the average of the three channels as the gray colour.

Источник

TensorFlow Variables and Placeholders: Complete Guide

TensorFlow Variables and Placeholders Tutorial With Example is today’s topic. TensorFlow is an open-source machine learning framework developed by Google that can build neural networks and perform a variety of all machine learning tasks. TensorFlow works on data flow graphs where nodes are the mathematical operations, and the edges are the data in the tensors, hence the name Tensor-Flow.

Tensors

A tensor is a central unit of data in TensorFlow. It consists of primitive values stored in the shape of a multidimensional array. The number of dimensions a tensor has is called it’s rank.

A rank 0 tensor is just a scalar. To keep things simple, we can say that a tensor in TensorFlow is a fancy name of an array, and now we call dimension number as rank. So one-dimensional array or list is rank one tensor, and a two-dimensional array or list is two rank tensor.

TensorFlow Variables

When we train the model, we need to assign some weights and biases throughout the session.

TensorFlow variables can hold the values of biases and weights throughout the session.

You need to one thing keep in mind that TensorFlow variables need to be initialized.

In TensorFlow, variables are of great use when we are training models. As constants, we have to call a constructor to initialize a variable; the initial value can be passed in as an argument.

Variables can easily be added to the computational graph by calling a constructor.

TensorFlow Placeholder

TensorFlow placeholders are initially empty and are used to feed in the actual training examples.

If we want to inject the data into a computation graph, we have to use the mechanism named as a placeholder. Placeholders are bound inside some expressions. The syntax of the placeholder is following.

Placeholders allow us not to provide the data in advance for operations and computation graphs. Instead, the data can be added in runtime from external sources to train the Machine Learning models.

TensorFlow Placeholder does need to declare as a float32 datatype within an optional shape parameter.

TensorFlow Variables and Placeholders Tutorial

Okay, we have covered enough theory. Let’s see some practical examples of TensorFlow Variables and Placeholders in Python Jupyter Notebook.

You can find the guide about how to install TensorFlow on Mac in this article.

Also, you can find the basics of the TensorFlow post.

Now, fire up the Jupyter Notebook and import the TensorFlow.

You can run the cell by keyboard shortcut Ctrl + Enter.

In the next cell, we will write the following code.

The only difference with a regular Session is that an InteractiveSession installs itself as the default session on construction. So we do not need to write that with tf.Session() as sess code whenever we need to perform some operations.

Once we run the above code, we do not need to start the session again for that Jupyter Notebook file.

Now, let’s define a random tensor using the following code.

Here, we have defined the 4*4 matrix between the value 1 and 2. The values are random between 1 to 2.

When we try to display the tensorA, we will get the following output.

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

Here, you can see that the datatype of tensorA is float32.

Now, in the next step, we will define a TensorFlow variable called tensor_var_A.

Okay, now run the tensor_var_A variable.

You will get an error like below.

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

So, the error is saying that FailedPreconditionError: Attempting to use uninitialized value Variable.

That means we need to first initialize the TensorFlow variable, and then we can run that variable.

So, let’s do that first. Then, write the following code in the next cell.

Run the above cell and then write the following code in the next cell.

Run the above cell, and all the variables are initialized. Next, we write that failed code again, and now you can see the 4*4 matrix.

See the output below.

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

Now, let’s create a TensorFlow Placeholder Example.

Define one placeholder using the following code in the next cell.

The above code creates a TensorFlow placeholder, and its datatype is float32, and here None is the placeholder’s initial value of data. As time goes and our machine learning mode starts training, the data is filled in the placeholder. But, at the starting point, it is None.

We can use another example of TensorFlow Placeholder, which is the following code.

Here, we have defined two placeholders and then create the third node to add both placeholders and run the operation. Remember, we are using Interactive Session. The output is following.

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

So, this is how you can create TensorFlow Variables and Placeholders.

Источник

Placeholders in Tensorflow

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

To quickly recap how a tensorflow program executes.

With placeholders we can assemble a graph without prior knowledge of the graph. Also the users of the program can later provide their own data during execution.

Placeholders

Syntax: tf.placeholder(dtype, shape=None, name=None)

How to assign values to placeholders?

One way to assign a value to a placeholder is using dictionary.

shape=None in the syntax means that the placeholder can accept a tensor of any shape for the placeholder. It is a easy way to use placeholders but it is not advisable since it is tough to debug the code with shape=None.

Placeholder are valid ops so that we can use them in ops such as add, sub etc.

Lazy loading of variables in Tensorflow

Tensorflow adopts a technique for deferring the initialization of a variable until it is needed for computation, that I am calling here as lazy loading, do not confuse with any other concept. It helps in keeping the memory footprint low and also efficient loading of variables.

Normal loading of variables in an example

Deferred (Lazy) loading of variables in an example

The output in both the cases is 30, but the way the variables are initialized is very different.

In the case of the deferred loading the node Add is added multiple times to a graph and that can be a problem while reading the graph, imagine if you want to build a graph that has thousands of operations, this can get your graph very messy. The trick is to separate the operations from the data.

I promised to keep my posts short and sweet. So i will stop at that.

Источник

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

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

Эксперт в области data science и руководитель компании STATWORX Себастьян Хайнц опубликовал на Medium руководство по созданию модели глубокого обучения для прогнозирования цен акций на бирже с использованием фреймворка TensorFlow. Мы подготовили адаптированную версию этого полезного материала.

Автор разместил итоговый Python-скрипт и сжатый датасет в своем репозитории на GitHub.

Импорт и подготовка данных

Хайнц экспортировал биржевые данных в csv-файл. Его датасет содержал n = 41266 минут данных, охватывающих торги 500 акциями в период с апреля по август 2017, также в него вошла информация по цене индекса S&P 500.

Так выглядит временной ряд индекса S&P, построенный с помощью pyplot.plot(data[‘SP500’]):

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

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

Подготовка данных для тестирования и обучения

Набор данных был разбит на два — одна часть для тестирования, а вторая для обучения. При этом, данные для обучения составили 80% от всего их объема и охватили период с апреля до приблизительно конца июля 2017 года, данные для тестирования оканчивались августом 2017 года.

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

Масштабирование данных

Большинство архитектур нейронных сетей используют масштабирование входных данных (а иногда и выходных). Причина в том, что большинство функций активации нейронов вроде сигмовидной или гиперболической касательной (tanx) определены на интервалах [-1, 1] или [0, 1], соответственно. В настоящее время, наиболее часто используются активации выпрямленной линейной единицей (ReLU). Хайнц решил масштабировать входные данные и цели, использовав для этой цели MinMaxScaler в Python:

Примечание: следует быть внимательным при выборе части данных и времени для масштабирования. Распространенная ошибка здесь — масштабировать весь датасет до его разбиения на тестовые и обучающие данные. Это ошибка, поскольку масштабирование запускает подсчет статистики, то есть минимумов/максимумов переменных. При осуществлении прогнозирования временных рядов в реальной жизни, на момент их генерации у вас не может быть информации из будущих наблюдений. Поэтому подсчет статистики должен производиться на тренировочных данных, а затем полученный результат применяться к тестовым данным. Брать для генерирования предсказаний информацию «из будущего» (то есть из тестовой выборки), то модель будет выдавать прогнозы с «системной предвзятостью» (bias).

Введение в TensorFlow

TensorFlow — отличный продукт, в настоящий момент это самый популярный фреймворк для решения задач машинного обучения и создания нейронных сетей. Бэкенд продукта основан на C++, однако для управления обычно используется Python (также существует замечательная библиотека TensorFlow для R). TensorFlow использует концепцию графического представления вычислительных задач. Такой подход позволяет пользователям определять математические операции в качестве элементов графов данных, переменных и операторов. Поскольку нейронные сети, по сути, и являются графами данных и математических операций, TensorFlow отлично подходит для работы с ними и машинного обучения. В примере ниже представлен граф, который решает задачу сложения двух чисел:

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

На рисунке выше представлены два числа, которые нужно сложить. Они хранятся в переменных a и b. Значения путешествуют по графу и попадают в узел, представленный квадратом, где и происходит сложение. Результат операции записывается в другую переменную c. Использованные переменные можно рассматривать как плейсхолдеры. Любые числа, попадающие в a и b, складываются, а результат записывается в c.

Именно так и работает TensorFlow — пользователь определяет абстрактное представление модели (нейронной сети) через плейсхолдеры и переменные. После этого первые наполняются реальными данными и происходят вычисления. Тестовый пример выше описывается следующим кодом в TensorFlow:

После импорта библиотеки TensorFlow с помощью tf.placeholder() определяются два плейсхолдера. Они соответствуют двум голубым кругам в левой части изображения выше. После этого, с помощью tf.add() определяется операция сложения. Результат операции — это c = 9. При настроенных плейсхолдерах граф может быть исполнен при любых целочисленных значениях a и b. Понятно, что этот пример крайне прост, а нейронные сети в реальной жизни куда сложнее, но он позволяет понять принципы работы фреймворка.

Плейсхолдеры

Как сказано выше, все начинается с плейсхолдеров. Для того, чтобы реализовать модель, нужно два таких элемента: X содержит входные данные для сети (цены акций всех элементов S&P 500 в момент времени T = t) и выходные данные Y (значение индекса S&P 500 в момент времени T = t + 1).

Форма плейсхолдеров соответствует [None, n_stocks], где [None] означает, что входные данные представлены в виде двумерной матрицы, а выходные данные — одномерного вектора. Важно понимать, какая форма входных и выходных данных нужна нейросети и соответственным образом их организовать.

Аргумент None означает, что в этой точке мы еще не знаем число наблюдений, которые пройдут через граф нейросети во время каждого запуска, поэтому он остается гибким. Позднее будет определена переменная batch_size, которая контролирует количество наблюдений в ходе обучающего «прогона».

Переменные

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

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

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

Разработка архитектуры сети

После определения требуемых весов и смещений переменных, сетевой топологии, необходимо определить архитектуру сети. Таким образом, плейсхолдеры (данные) и переменные (веса и смещения) нужно объединить в систему последовательных матричных умножений. Скрытые уровни сети трансформируются функциями активации. Эти функции — важные элементы сетевой инфраструктуры, поскольку они привносят в систему нелинейность. Существуют десятки функций активации, и одна из самых распространенных — выпрямленная линейная единица (rectified linear unit, ReLU). В данном руководстве используется именно она:

Представленное ниже изображение иллюстрирует архитектуру сети. Модель состоит из трех главных блоков. Уровень входных данных, скрытые уровни и выходной уровень. Такая инфраструктура называется упреждающей сетью (feedforward network). Это означает что куски данных продвигаются по структуре строго слева-направо. При других реализациях, например, в случае рекуррентных нейронных сетей, данные могут перетекать внутри сети в разные стороны.

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

Функция стоимости

Функция стоимости сети используется для генерации оценки отклонения между прогнозами сети и реальными результатами наблюдений в ходе обучения. Для решения проблем с регрессией используют функцию средней квадратичной ошибки (mean squared error, MSE). Данная функция вычисляет среднее квадратичное отклонение между предсказаниями и целями, но вообще для подсчета отклонения между может быть использована любая дифференцируемая функция.

При этом, MSE отображает конкретные сущности, которые полезны для решения общей проблемы оптимизации.

Оптимизатор

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

В данном случае используется один из наиболее распространенных оптимизаторов в сфере машинного обучения Adam Optimizer. Adam — это аббревиатура для фразы “Adaptive Moment Estimation” (адаптивная оценка моментов), он представляет собой нечто среднее между двумя другими популярными оптимизаторами AdaGrad и RMSProp

Инициализаторы

Инициализаторы используются для инициализации переменных перед стартом обучения. Поскольку нейронные сети обучаются с помощью численных техник оптимизации, начальная точки проблемы оптимизации — это один из важнейших факторов на пути поиска хорошего решения. В TensorFlow существуют различные инициализаторы, каждый из которых использует собственный подход. В данном руководстве использован tf.variance_scaling_initializer(), который реализует одну из стандартных стратегий инициализации.

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

Настройка нейросети

После определения плейсхолдеров, переменных, инициализаторов, функций стоимости и оптимизаторов, модель необходимо обучить. Обычно для этого используется подход мини-партий (minibatch training). В ходе такого обучения из набора данных для обучения отбираются случайные семплы данных размера n = batch_size и загружаются в нейросеть. Набор данных для обучения делится на n / batch_size кусков, которые затем последовательно отправляются в сеть. В этот момент в игру вступают плейсхолдеры X и Y. Они хранят входные и целевые данные и отправляют их в нейросеть.

Семплированные данные X проходят по сети до достижения выходного уровня. Затем TensorFlow сравнивает сгенерированные моделью прогнозы с реально наблюдаемыми целями Y в текущем «прогоне». После этого TensorFlow выполняет этап оптимизации и обновляет параметры сети, после обновления весов и отклонений, процесс повторяется снова для нового куска данных. Процедура повторяется до того момента, пока все «нарезанные» куски данных не будут отправлены в нейросеть. Полный цикл такой обработки называется «эпохой».

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

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

Как видно, нейросеть быстро адаптируется к базовой форме временного ряда и продолжает искать наилучшие паттерны данных. После прошествия 10 эпох мы получаем результаты, очень близкие к тестовым данным. Финальное значение функции MSE составляет 0,00078 (очень маленькое значение из-за того, что цели масштабированы). Средняя абсолютная процентная погрешность прогноза на тестовом наборе равняется 5,31% — очень хороший результат. Важно понимать, что это лишь совпадение с тестовыми, а не реальными данными.

placeholder tensorflow что это. Смотреть фото placeholder tensorflow что это. Смотреть картинку placeholder tensorflow что это. Картинка про placeholder tensorflow что это. Фото placeholder tensorflow что это

График рассеяния между предсказанными и реальными ценами S&P

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

Источник

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

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