Анализ данных на Python — построение модели фондового рынка со Stocker

3 сентября 2018
Stock market prediction python

Анализ данных на Python — построение модели фондового рынка со Stocker

В Data Science легко увлечься разнообразием данных и бесплатными инструментами с открытым исходным кодом. Проведя немного времени с финансовой библиотекой quandl и библиотекой прогнозирования Prophet, я решил попробовать исследовать несколько…

В Data Science легко увлечься разнообразием данных и бесплатными инструментами с открытым исходным кодом. Проведя немного времени с финансовой библиотекой quandl и библиотекой прогнозирования Prophet, я решил попробовать исследовать несколько простых курсов акций. Парочка дней и 1000 строк кода Python привели меня к полноценному инструменту анализа и прогнозирования рынка. Хотя я и недостаточно смелый (или глупый!), чтобы применить его для инвестиций в настоящие акции, в процессе я узнал многое о Python, и в духе open-source хочу поделиться своими результатами и кодом с вами — может кому пригодится.

Введение

В этой статье будет показано, как использовать Stocker, инструмент для анализа и прогнозирования рынка, реализованный в виде класса Python. Название было изначально произвольным, но потом оказалось, что оно хорошо подходит для «исследователя рынка» («stock» (англ.) = «акция», прим.). Несколько раз я пытался одолеть классы, основу объектно-ориентированного программирования на Python, но, как и большинство разделов программирования, они не имели смысла, пока я только читал книги. Только когда я погрузился в реальный проект, в котором возникла проблема, которую я раньше не решал, лишний раз убедился, что практика > теория! Помимо рассмотрения Stocker, мы затронем некоторые важные темы, включая основы классов Python и аддитивных моделей. Для тех, кто хочет использовать Stocker, весь код можно найти в GitHub вместе с документацией. Программа специально  разрабатывалась так, чтобы быть простой в использовании (даже для тех, кто не знаком с Python), и я рекомендую всем читающим статью опробовать ее.

Перейдем к возможностям Stocker!

Stocker и Python

Начало работы со Stocker

После установки необходимых библиотек первое, что нужно сделать — импортировать класс Stocker в сессию Python. Сделать это можно из интерактивного режима, или же в Jupyter Notebook, запущенного в каталоге со скриптом.

from stocker import Stocker

Теперь класс Stocker есть в нашей сессии, и мы можем использовать его для создания экземпляра класса. В Python экземпляры класса называются объектами, а акт создания объекта называют конструированием. Чтобы создать объект Stocker, нам нужно передать действительный идентификатор (stock ticker), в нашем случае, 'MSFT'. Жирным шрифтом будем обозначать вывод программы.

microsoft = Stocker('MSFT')

MSFT Stocker Initialized. Data covers 1986-03-13 to 2018-01-16.

Теперь у нас есть объект microsoft со всеми свойствами класса Stocker. Stocker построен на базе данных Quandl WIKI, которая дает нам доступ к более чем 3000 наборам данных рынков США с известными ежедневными ценами в течение многих лет (полный список здесь). В этом примере мы будем использовать акции Microsoft. Хотя эту компанию рассматривают как противников open-source, недавно она стала меняться и внушать оптимизм: Microsoft начали развивать сообщество с открытым исходным кодом (включая Python).

Преимущества Python

Класс в Python состоит из двух основных частей: полей и методов. Не вдаваясь в подробности, поля (или атрибуты) — значения или данные, связанными либо с классом в целом, либо с конкретными экземплярами (объектами) класса. Методы — это функции, содержащиеся в классе, которые могут взаимодействовать с этими данными. Одно из полей объекта Stocker — это история рынка для конкретной компании, значение которого связывается с объектом при его создании. Чтобы проверить это, мы можем получить доступ к атрибуту и ​​присвоить его значение другой переменной:

# Stock - это атрибут объекта microsoft
stock_history = microsoft.stock
stock_history.head()
рынок акций
Данные по акциям Microsoft

Преимущество класса Python заключается в том, что функции и данные, на которые они действуют, связаны с одним и тем же объектом. Мы можем использовать функцию объекта Stocker для построения всей истории курса:

# у функции нужно писать скобки
microsoft.plot_stock()

Maximum Adj. Close = 89.58 on 2018-01-12.
Minimum Adj. Close = 0.06 on 1986-03-24.
Current Adj. Close = 88.35.

python analysis

По умолчанию значение, которое рисуется — это скорректированная цена закрытия, т.к. акции могут разделить («Stock split». Например, акция начнет стоит 1/2 от предыдущей цены, но и количество акций удвоится. Это делается, чтобы акции стали доступны для мелких инвесторов).

Это довольно простой график, который мы легко бы нашли самостоятельно в поиске Google, но так приятно сделать это самому несколькими строками на Python! Функция plot_stockимеет ряд необязательных аргументов. По умолчанию этот метод отображает скорректированную цену закрытия за весь доступный промежуток времени, можно задавать диапазон дат, желаемую статистику для графика и тип графика. Например, если мы хотим сравнить ежедневное изменение цены со скорректированным объемом (количеством акций), то укажите их в вызове функции.

microsoft.plot_stock(start_date = '2000-01-03',  end_date = '2018-01-16', 
                   stats = ['Daily Change', 'Adj. Volume'],  plot_type='pct')

Maximum Daily Change = 2.08 on 2008-10-13.
Minimum Daily Change = -3.34 on 2017-12-04.
Current Daily Change = -1.75.

Maximum Adj. Volume = 591052200.00 on 2006-04-28.
Minimum Adj. Volume = 7425503.00 on 2017-11-24.
Current Adj. Volume = 35945428.00.

анализ данных Python

Обратите внимание, что ось y измеряется в процентах относительно среднего значения для статистики. Эта шкала необходима, потому что ежедневный объем торговли акциями находится в диапазоне в сотнен миллионов, а ежедневное изменение цены обычно составляет несколько долларов!

Ежедневное изменение цены предсказать невозможно

Преобразовав в процентное изменение, мы можем посмотреть на оба набора данных в аналогичном масштабе. На графике показано, что нет никакой корреляции между объемом торгов и ежедневным изменением цены. Это удивительно, поскольку мы могли ожидать, что больше акций будет продаваться в дни с большими изменениями цен, поскольку люди спешат воспользоваться преимуществами колебаний. Тем не менее, единственной тенденцией, по-видимому, является то, что объем торговли с течением времени уменьшается. 4 декабря 2017 года также произошло значительное снижение цены, и мы могли бы попытаться соотнести с новостями о Microsoft. Быстрый поиск новостей за 3 декабря выдает следующее:

Надежность этих источников вызывает вопросы
Надежность этих источников вызывает вопросы

Разумеется, нет никаких признаков того, что на следующий день это приведет к крупнейшему падению акций Microsoft за 10 лет! Наоборот, у трейдера должен был возникнуть соблазн купить акции, если делать решения, основываясь только на новостях, потому что сделка с NFL (второй результат в выдаче) выглядит как положительная новость.

Построим графики на любой вкус

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

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

microsoft.buy_and_hold(start_date='1986-03-13',
                      end_date='2018-01-16', nshares=100)

MSFT Total buy and hold profit from 1986-03-13 to 2018-01-16 for 100 shares = $8829.11

Красивый график на Python

Использование этих результатов позволит планировать наши «перемещения» во времени назад, чтобы максимизировать прибыль.

Изменим временной промежуток и сравним полученный результат:

microsoft.buy_and_hold(start_date='1999-01-05',
                     end_date='2002-01-03', nshares=100)

MSFT Total buy and hold profit from 1999-01-05 to 2002-01-03 for 100 shares = $-56.92

Удивительно, но на фондовом рынке можно потерять деньги!

Аддитивные модели

Аддитивные модели — мощный инструмент анализа и предсказания временных рядов, одного из наиболее распространенных типов данных. Концепция проста: временные ряды представляют как комбинацию некоторых шаблонов в разных временных масштабах и общий тренд. Мы знаем, что тренд для акций Microsoft — постоянный рост, но также могут быть закономерности на ежегодной или ежедневной основе, такие как рост каждый вторник, что выгодно знать инвестору. Prophet — потрясающая библиотека разработанная Facebook, для анализа временных рядов с ежедневными наблюдениями (например, цены акций) (“prophet” (англ.) = “пророк”, прим.). Stocker делает моделирование с Prophet под капотом, остается вызвать метод для создания и проверки модели:

model, model_data = microsoft.create_prophet_model()

Моделирование цены акций на Python

Аддитивная модель сглаживает шум в данных, поэтому смоделированная линия не совпадает с наблюдениями. Модели Prophet также вычисляют неопределенность, естественную часть моделирования, поскольку никогда нельзя быть уверенным в прогнозах при работе с колебаниями реальных процессов в жизни. Prophet модель способна делать прогнозы на будущее, но пока мы больше озабочены прошлым. Обратите внимание, что этот вызов метода возвратил два объекта, модель и некоторые данные, которые мы присвоили переменным. Используем эти переменные для построения временных рядов.

# model и model_data из предыдущего вызова функций
model.plot_components(model_data)
plt.show()

зависимости найденные Stocker

Общая тенденция — рост в последние три года (первый график). Также заметна годовая зависимость (нижний график), когда цены снижаются в сентябре и октябре и достигают пика в ноябре и январе. По мере уменьшения масштаба времени данные становятся более шумными. В течение типичного месяца сигнала больше, чем шума! Если мы предполагаем существование недельной зависимости, добавим ее в модель, изменив атрибут weekly_seasonality объекта Stocker:

print(microsoft.weekly_seasonality)
microsoft.weekly_seasonality = True
print(microsoft.weekly_seasonality)

False
True

Значение по умолчанию для weekly_seasonality — False, но мы изменили значение, чтобы включить «недельную сезонность» в нашу модель. Затем сделаем еще один вызов create_prophet_model и отобразим полученные компоненты. Ниже приведена зависимость новой модели.

некрасивый график Stocker
У меня не получилось заставить график выглядеть хорошо

Мы можем игнорировать выходные дни, потому что цена меняется только в течение рабочей недели (на самом деле также незначительно меняется во время after-hours trading (OTC), но это не влияет на наш анализ). К сожалению, на недельном графике нелья выделить тенденцию, поэтому  отключим недельную сезонность. Такое поведение ожидаемо: по мере уменьшения масштаба времени шум начинает подавлять сигнал. На ежедневной основе движение акций непредсказуемо, тренды видны только за счет увеличения масштаба до годового. Надеюсь, это послужит напоминанием о том, почему не стоит играть на ежедневных колебаниях курса!

Контрольные точки

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

microsoft.changepoint_date_analysis()

Changepoints sorted by slope rate of change (2nd derivative):

         Date Adj. Close     delta
48  2015-03-30   38.238066 2.580296
337 2016-05-20   48.886934 2.231580
409 2016-09-01   55.966886 -2.053965
72  2015-05-04   45.034285 -2.040387
313 2016-04-18   54.141111 -1.936257

экстремумы цены найденные с помощью Python

Контрольные точки имеют тенденцию находиться на пиках и провалах в ценах акций. «Пророк» находит точки смены только на первых 80% данных, но эти результаты все равно полезны, поскольку их можно сопоставить с событиями и новостями. Мы могли бы повторить то, что делали ранее — вручную искать новости Google, происходившие в эти даты. Но было бы предпочтительнее, если бы Stocker сделал это вместо нас. Возможно, вы знаете инструмент Google Search Trends, который показывает относительную популярность поискового запроса с течением времени в результатах поиска Google. Stocker автоматически извлекает информацию об указанном запросе, и выводит результат поверх исходных данных. Чтобы найти и рассчитать частоту поисковых запросов, модифицируем предыдущий вызов функции:

# тот же метод, но с поисковыми запросами
microsoft.changepoint_date_analysis(search = 'Microsoft profit')

Top Related Queries:

                 query value
0  microsoft non profit    100
1      microsoft office     55
2                 apple     30
3         microsoft 365     30
4  microsoft office 365     20

Rising Related Queries:

                  query value
0          microsoft 365    120
1   microsoft office 365     90
2  microsoft profit 2014     70

акции Microsoft и зависимость

Помимо графического отображения относительной частоты поиска, Stocker отображает близкие связанные и набирающие популярность для диапазона дат графика запросы. На графике ось y нормализуется между 0 и 1, деля значения по их максимумам, позволяя сравнивать две переменные с разными шкалами. Из рисунка, похоже, следует, что корреляции между поисками «прибыль Microsoft» и ценой акций Microsoft нет.

Зависимость: прямая, обратная или случайная?

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

microsoft.changepoint_date_analysis(search = 'Microsoft Office')

анализ <span class=данных Python и Stocker» width=»570″ height=»386″ data-mce-src=»https://neurohive.io/wp-content/uploads/2018/08/1_6aJKZOdBN7Fs3EYTxU3LjA-570×386.png» ><=»» p=»»>

Похоже, что уменьшение количества поисковых запросов «Microsoft Office» приводит к росту цен на акции. Кто-то должен сказать Microsoft об этом.

Предсказания цены акций на Python

Мы изучили только первую половину возможностей Stocker. Вторая половина предназначена для прогнозирования будущей цены акций. Хотя это может быть бесполезным упражнением (или, по крайней мере, не окупающимся по деньгам), здесь еще есть чему поучиться!

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

# specify number of days in future to make a prediction
model, future = microsoft.create_prophet_model(days=180)

Predicted Price on 2018-07-15 = $97.67

предсказание цены акций Python

Хотя все возможности Stocker уже давно общедоступны и известны, процесс создания этого инструмента для меня был приятным и, что более важно, дал мне больше знаний о Data Science, Python и фондовом рынке, чем обучающие курсы. Мы живем в невероятном мире свободных знаний, где каждый может узнать о программировании или даже о современных областях, таких как машинное обучение, без лишних формальностей. Если у вас есть идея для проекта, но вы считаете, что знаний для ее реализации недостаточно, или что она уже была реализована раньше — не позволяйте этому останавливать вас. Ваше решение может оказаться лучшим, и даже если окажется не так, вы все равно узнаете гораздо больше, чем если бы вы никогда не попробовали!

Как всегда, я приветствую конструктивную критику и обратную связь (en). Меня можно найти в Twitter на @koehrsen_will.

Оригинал


Больше статей о машинном обучении на Python:

Как создать собственную нейронную сеть с нуля на языке Python

25 июня 2018
нейронная сеть на python

Как создать собственную нейронную сеть с нуля на языке Python

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

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

Мотивация: ориентируясь на личный опыт в изучении глубокого обучения, я решил создать нейронную сеть с нуля без сложной учебной библиотеки, такой как, например, TensorFlow. Я считаю, что для начинающего Data Scientist-а важно понимание внутренней структуры нейронной сети.

Эта статья содержит то, что я усвоил, и, надеюсь, она будет полезна и для вас! Другие полезные статьи по теме:

Что такое нейронная сеть?

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

Нейронные сети состоят из следующих компонентов:

  • входной слой, x
  • произвольное количество скрытых слоев
  • выходной слой, ŷ
  • набор весов и смещений между каждым слоем и b
  • выбор функции активации для каждого скрытого слоя σ; в этой работе мы будем использовать функцию активации Sigmoid

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

   нейронная сеть на python

Создание класса Neural Network на Python выглядит просто:

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

Выход ŷ простой двухслойной нейронной сети:

обучение нейронной сети на питон

В приведенном выше уравнении, веса W и смещения b являются единственными переменными, которые влияют на выход ŷ.

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

Каждая итерация обучающего процесса состоит из следующих шагов

  • вычисление прогнозируемого выхода ŷ, называемого прямым распространением
  • обновление весов и смещений, называемых обратным распространением

Последовательный график ниже иллюстрирует процесс:

backpropagation

Прямое распространение

Как мы видели на графике выше, прямое распространение — это просто несложное вычисление, а для базовой 2-слойной нейронной сети вывод нейронной сети дается формулой:

обучение нейронной сети на питон

Давайте добавим функцию прямого распространения в наш код на Python-е, чтобы сделать это. Заметим, что для простоты, мы предположили, что смещения равны 0.

Однако нужен способ оценить «добротность» наших прогнозов, то есть насколько далеки наши прогнозы). Функция потери как раз позволяет нам сделать это.

Функция потери

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

функция потери

Сумма квадратов ошибок — это среднее значение разницы между каждым прогнозируемым и фактическим значением.

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

Обратное распространение

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

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

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

градиентный спуск

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

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

chain rule python neural network

Фух! Это было громоздко, но позволило получить то, что нам нужно — производную (наклон) функции потерь по отношению к весам. Теперь мы можем соответствующим образом регулировать веса.

Добавим функцию backpropagation (обратного распространения) в наш код на Python-е:

Проверка работы нейросети

Теперь, когда у нас есть наш полный код на Python-е для выполнения прямого и обратного распространения, давайте рассмотрим нашу нейронную сеть на примере и посмотрим, как это работает.

Идеальный набор весов нейросети
Идеальный набор весов

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

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

ошибка нейронной сети

Посмотрим на окончательное предсказание (вывод) из нейронной сети после 1500 итераций.

предсказание

Мы сделали это! Наш алгоритм прямого и обратного распространения показал успешную работу нейронной сети, а предсказания сходятся на истинных значениях.

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

Финальные размышления

Я многому научился в процессе написания с нуля своей собственной нейронной сети. Хотя библиотеки глубинного обучения, такие как TensorFlow и Keras, допускают создание глубоких сетей без полного понимания внутренней работы нейронной сети, я нахожу, что начинающим Data Scientist-ам полезно получить более глубокое их понимание.

Я инвестировал много своего личного времени в данную работу, и я надеюсь, что она будет полезной для вас!

Обзор Tensorflow.JS: машинное обучение на JavaScript

25 июня 2018
Tensorflow Javascript

Обзор Tensorflow.JS: машинное обучение на JavaScript

Разработчики Google представили TensorFlow.JS — библиотеку с открытым исходным кодом, которую можно использовать для определения, обучения и запуска моделей машинного обучения полностью в браузере, используя Javascript и высокоуровневое API. Если вы Javascript-разработчик, который…

Разработчики Google представили TensorFlow.JS — библиотеку с открытым исходным кодом, которую можно использовать для определения, обучения и запуска моделей машинного обучения полностью в браузере, используя Javascript и высокоуровневое API.

Если вы Javascript-разработчик, который новичок в машинном обучении, TensorFlow.js — отличный способ начать обучение.

Если вы ML-инженер и новичок в Javascript, то читайте дальше, чтобы узнать больше о новых возможностях in-browser ML.

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

In-Browser ML

Запуск программ машинного обучения полностью на стороне клиента в браузере открывает новые возможности, такие как интерактивное ML! Если вы посмотрите трансляцию c TensorFlow Developer Summit, то в течение выступления о TensorFlow.js вы найдете демо-версию, где @dsmilkov и @nsthorat обучают модель управления игрой PAC-MAN с помощью компьютерного зрения и веб-камеры прямо в браузере. Вы также можете попробовать сделать это самостоятельно, перейдя по ссылке ниже — и найти нужное в папке examples.

Превратите свою веб-камеру в пульт управления для PAC-MAN с помощью нейронной сети
Превратите свою веб-камеру в пульт управления для PAC-MAN с помощью нейронной сети

Если вы хотите попробовать другую игру, то оцените Emoji Scavenger Hunt— на этот раз из браузера на вашем мобильном телефоне.

Emoji Scavenger Hunt — интересный пример приложения, построенного с использованием TensorFlow.js. Попробуйте его с телефона
Emoji Scavenger Hunt — интересный пример приложения, построенного с использованием TensorFlow.js. Попробуйте его с телефона

ML работа в браузере означает, что с точки зрения пользователя, нет необходимости устанавливать какие-либо библиотеки или драйвера. Просто откройте веб-страницу, и ваша программа готова к запуску. Кроме того, всё готово к работе с ускорением на GPU. TensorFlow.js автоматически поддерживает WebGL и незаметно ускоряет ваш код, когда GPU доступен. Пользователи также могут открыть веб-страницу с мобильного устройства, и в этом случае ваша модель может воспользоваться данными с датчиков, например, от гироскопа или акселерометра. Наконец, все данные остаются на стороне клиенте, делая TensorFlow.js пригодным для вывода с низкой задержкой, а также для приложений, сохраняющих конфиденциальность.

Что можно делать с TensorFlow.js?

Если вы разрабатываете, используя TensorFlow.js, вот три рабочих процесса, которые вы можете рассматривать.

  1. Можно импортировать существующую предварительно подготовленную модель. Если у вас есть существующая модель на TensorFlow или Keras, которую вы ранее обучали в оффлайн режиме, то вы можете преобразовать её в TensorFlow.js формат, и загрузить в браузер.
  2. Можно повторно обучить импортированную модель. Как и в приведенной выше demo Pac-Man, вы можете использовать transfer learning для дополнения существующей модели, обученной в offline режиме, используя небольшое количество данных, собранных в браузере, используя метод, называемый Image Retraining. Это один из способов быстрой подготовки точной модели с использованием лишь небольшого количества данных.
  3. Создать модель прямо в браузере. Вы можете использовать TensorFlow.js для создания, обучения и запуска моделей полностью в браузере с использованием Javascript и высокоуровневого API. Если вы знакомы с Keras, то это API должно показаться знакомым.

Давайте посмотрим код

Если хотите сразу начать работу, можно отправиться к примерам или обучалкам. Они показывают, как экспортировать модель на Python для вывода в браузере, а также как определять и обучать модели полностью на Javascript. В качестве быстрого предварительного просмотра, ниже приведён фрагмент кода, который определяет нейронную сеть для классификации цветов, так же, как в руководстве по началу работы на TensorFlow.org. Здесь мы определим модель, используя стек слоев.

API, которое мы используем здесь, поддерживает все слои Keras, находящиеся в каталоге примеров (включая Dense, CNN, LSTM и так далее). Затем мы можем обучить нашу модель, используя тот же API, совместимое с Keras, при помощи вызова метода:

Теперь модель готова к использованию:

TensorFlow.js также включает в себя низкоуровневый API (ранее deeplearn.js) и поддержку Eager execution. Вы можете узнать об этом больше, посмотрев выступление на TensorFlow Developer Summit.

Обзор API TensorFlow.js. TensorFlow.js работает на WebGL и предоставляет высокоуровневый API для создания моделей и низкоуровневый API для работы с линейной алгебры и алгеброическим дифференциированием (automatic differentation). TensorFlow.js поддерживает импорт моделей Tensorflow SavedModels и Keras
Обзор API TensorFlow.js. TensorFlow.js работает на WebGL и предоставляет высокоуровневый API для создания моделей и низкоуровневый API для работы с линейной алгебры и алгеброическим дифференциированием (automatic differentation). TensorFlow.js поддерживает импорт моделей Tensorflow SavedModels и Keras

Как TensorFlow.js относятся к deeplearn.js?

Хороший вопрос! TensorFlow.JS, экосистема инструментов JavaScript для машинного обучения, является преемником deeplearn.js, который теперь называется TensorFlow.js Core. TensorFlow.js также включает в себя API, который является библиотекой более высокого уровня для построения моделей машинного обучения, которая использует ядро (core), а также инструменты для автоматического переноса моделей TensorFlow SavedModels и Keras hdf5. Для получения ответов на похожие вопросы, ознакомьтесь с FAQ.