TensorFlow.js машинное обучение на JavaScript с доставкой в браузер


Please verify you are a human

Access to this page has been denied because we believe you are using automation tools to browse the website.

This may happen as a result of the following:

  • Javascript is disabled or blocked by an extension (ad blockers for example)
  • Your browser does not support cookies

Please make sure that Javascript and cookies are enabled on your browser and that you are not blocking them from loading.

Reference ID: #3abbb440-040c-11ea-9547-9f6604cc18b0

Страница поста от канала Библиотека программиста

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме

Пожаловаться

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме

Machine Learning: Tensorflow v/s Tensorflow.js v/s Brain.js

Недавно я начал кодирование с помощью методов машинного обучения и шел между машинным обучением, реализованным на разных платформах. Рамки, с которыми я много работал, были Tensorflow (Python), Tensorflow.js и Brain.js. И у меня есть несколько сомнений по поводу них.

  1. Почему большинство из них предпочитают Tensorflow (Python) над Tensorflow.js. Что делает Tensorflow тем, что Tensorflow.js не делает это особенным?
  2. Большинство людей, которых я видел в Интернете, предпочитают работать с Tensorflow.js, чем brain.js, хотя brain.js использует объекты JSON, которые не дают разработчику проблем с созданием тензоров и управлением памятью и т.д. Почему люди предпочитают работать с Tensorflow.js, хотя brain.js легко реализовать?
  3. Если я создаю веб-сайт, который использует Node.js в качестве бэкэнд, который будет предпочтительной библиотекой, которая будет реализована для машинного обучения в долгосрочной перспективе? Tensorflow.js или Brain.js? или я должен использовать Tensorflow отдельно для просто обучения машинам?

Я много искал эти темы. И у меня пока нет хорошего объяснения моих сомнений. Итак, ожидая ясной и детализированной экспланации 🙂

machine-learning tensorflow brain.js tensorflow.js

1 ответ

Скорости разные: Tensorflow> tfjs> brainjs. Python можно напрямую скомпилировать в машинный код и напрямую использовать процессор и графический процессор, тогда как tfjs — это скриптовый язык, который компилируется на клиенте и должен использовать в браузере для доступа к графическому процессору так же, как и мозг. js (я не уверен, что brain.js ускорен GPU)

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

И если вы используете nodejs, единственная причина остаться с tfjs и не переключиться на python — это то, что вам нравится язык JavaScript лучше или вы вынуждены использовать его, потому что работаете в JS-сервере.

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

Tensorflow.js реализует машинное обучение в браузере

Разработанную в компании Google библиотеку функций машинного обучения TensorFlow с открытым исходным кодом перевели на язык JavaScript. Новая библиотека — Tensorflow.js работает непосредственно в браузере и использует возможности ускорения вычислений средствами WebGL. Она может работать и в серверном варианте на платформе Node.js. Первый вариант этой библиотеки Google выпустила год назад под названием Deeplearn.js. Функциональность Deeplearn.js полностью включена в Tensorflow.js. Модели для TensorFlow.js можно строить с использованием либо низкоуровневых функций линейной алгебры в JavaScript, либо интерфейсов более высокого уровня. Интерфейс TensorFlow.js построен по образцу интерфейса к TensorFlow на языке Python, но пока не поддерживает всей его функциональности, а производительность Tensorflow.js c WebGL составляет 50–60% от производительности TensorFlow с интерфейсом на языке Python и библиотекой AVX.


Поделитесь материалом с коллегами и друзьями

Machine Learning : Tensorflow v/s Tensorflow.js v/s Brain.js [closed]

I’ve recently started coding with Machine learning techniques and had been going back and forth between Machine learning implemented in different platforms. The frameworks i worked a lot with were Tensorflow (Python), Tensorflow.js and Brain.js. And i’ve got couple of doubts about them.

  1. Why do most of them prefer Tensorflow (Python) over Tensorflow.js. What does Tensorflow has that Tensorflow.js doesn’t which makes it special?
  2. Most people i’ve seen in the internet prefer working with Tensorflow.js than brain.js, even though brain.js uses JSON objects which doesnt put the developer in a hassle to create Tensors and make memory management and stuff. Why do people prefer working with Tensorflow.js even though brain.js is easy to implement?
  3. If i’m making a web site which uses Node.js as a backend, which would be the preferable library to be implemented for Machine Learning in a long run? Tensorflow.js or Brain.js? or should i use Tensorflow separately for just Machine learning things?

I’ve been searching a lot on these topics. And i haven’t got a nice explanation for my doubts yet. So expecting a clear and detail exaplanation 🙂

TensorFlow.js: машинное обучение на JavaScript с доставкой в браузер

TensorFlow.js is an open-source hardware-accelerated JavaScript library for training and deploying machine learning models.

Develop ML in the Browser
Use flexible and intuitive APIs to build models from scratch using the low-level JavaScript linear algebra library or the high-level layers API.

Develop ML in Node.js
Execute native TensorFlow with the same TensorFlow.js API under the Node.js runtime.

Run Existing models
Use TensorFlow.js model converters to run pre-existing TensorFlow models right in the browser.

Retrain Existing models
Retrain pre-existing ML models using sensor data connected to the browser or other client-side data.

About this repo

This repository contains the logic and scripts that combine four packages:

  • TensorFlow.js Core, a flexible low-level API, formerly known as deeplearn.js.
  • TensorFlow.js Layers, a high-level API which implements functionality similar to Keras.
  • TensorFlow.js Data, a simple API to load and prepare data analogous to tf.data.
  • TensorFlow.js Converter, tools to import a TensorFlow SavedModel to TensorFlow.js

If you care about bundle size, you can import those packages individually.

If you are looking for Node.js support, check out the TensorFlow.js Node directory.

Be sure to check out the gallery of all projects related to TensorFlow.js.

Be sure to also check out our models repository where we host pre-trained models on NPM.

There are two main ways to get TensorFlow.js in your JavaScript project: via script tags or by installing it from NPM and using a build tool like Parcel, WebPack, or Rollup.

Add the following code to an HTML file:

Open up that HTML file in your browser, and the code should run!


Add TensorFlow.js to your project using yarn or npm. Note: Because we use ES2020 syntax (such as import ), this workflow assumes you are using a modern browser or a bundler/transpiler to convert your code to something older browsers understand. See our examples to see how we use Parcel to build our code. However, you are free to use any build tool that you prefer.

See our tutorials, examples and documentation for more details.

Importing pre-trained models

We support porting pre-trained models from:

TensorFlow.js is a part of the TensorFlow ecosystem. For more info:

Мастер Йода рекомендует:  Кому нужен выделенный сервер

Thanks, BrowserStack, for providing testing support.

Machine Learning: Tensorflow v/s Tensorflow.js v/s Brain.js

Недавно я начал кодирование с помощью методов машинного обучения и шел между машинным обучением, реализованным на разных платформах. Рамки, с которыми я много работал, были Tensorflow (Python), Tensorflow.js и Brain.js. И у меня есть несколько сомнений по поводу них.

  1. Почему большинство из них предпочитают Tensorflow (Python) над Tensorflow.js. Что делает Tensorflow тем, что Tensorflow.js не делает это особенным?
  2. Большинство людей, которых я видел в Интернете, предпочитают работать с Tensorflow.js, чем brain.js, хотя brain.js использует объекты JSON, которые не дают разработчику проблем с созданием тензоров и управлением памятью и т.д. Почему люди предпочитают работать с Tensorflow.js, хотя brain.js легко реализовать?
  3. Если я создаю веб-сайт, который использует Node.js в качестве бэкэнд, который будет предпочтительной библиотекой, которая будет реализована для машинного обучения в долгосрочной перспективе? Tensorflow.js или Brain.js? или я должен использовать Tensorflow отдельно для просто обучения машинам?

Я много искал эти темы. И у меня пока нет хорошего объяснения моих сомнений. Итак, ожидая ясной и детализированной экспланации 🙂

machine-learning tensorflow brain.js tensorflow.js

1 ответ

Скорости разные: Tensorflow> tfjs> brainjs. Python можно напрямую скомпилировать в машинный код и напрямую использовать процессор и графический процессор, тогда как tfjs — это скриптовый язык, который компилируется на клиенте и должен использовать в браузере для доступа к графическому процессору так же, как и мозг. js (я не уверен, что brain.js ускорен GPU)

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

И если вы используете nodejs, единственная причина остаться с tfjs и не переключиться на python — это то, что вам нравится язык JavaScript лучше или вы вынуждены использовать его, потому что работаете в JS-сервере.

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

Машинное обучение с Node.js при помощи библиотеки Tensorflow.js

Привет всем, коллеги!

Возможно, поклонники библиотеки Tensorflow, уже заметившие у нас в предзаказе эту книгу, также присматривались к возможностям машинного и глубокого обучения в браузере, тем более, что тему не обошел вниманием и сам Франсуа Шолле. Интересующихся приглашаем под кат, где рассказано, как при помощи библиотеки Tensorflow.js распознаются изображения.

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

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

Tensorflow.js начиналась как фронтендовая библиотека для работы в браузере, но в этом году в нее была добавлена экспериментальная поддержка Node.js. Таким образом, TensorFlow.js можно использовать и в бэкендовых приложениях на JavaScript, что совершенно избавляет нас от необходимости прибегать к Python.

Читая об этой библиотеке, я решил испробовать ее на простой задаче…


Использовать TensorFlow.js для визуального распознавания образов на изображениях при применении JavaScript из Node.js

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

Однако, через несколько дней долбежки я все-таки это сделал! Ура!

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

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

Это библиотека, выпущенная Google в ноябре 2015, исходно была написана на Python. Для обучения и оценки создаваемых моделей в ней применяются вычисления на CPU или GPU. Изначально эта библиотека создавалась для работы на высокопроизводительных серверах с использованием ресурсозатратных GPU.

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

Tensorflow Lite, облегченная версия этой библиотеки для мобильных устройств и встраиваемых систем, была выпущена в мае 2020 года. Вместе с ней предоставляется новый набор предобученных глубоких моделей для задач, связанных с распознаванием образов; эта коллекция именуется MobileNet. Модели MobileNet были разработаны специально для эффективной работы в окружениях с ограниченным количеством ресурсов, например, на мобильных устройствах.

Вслед за Tensorflow Lite в марте 2020 года была анонсирована TensorFlow.js. Эта версия библиотеки предназначена для работы в браузере и базируется на более раннем проекте под названием deeplearn.js. WebGL обеспечивает GPU-доступ к библиотеки. Разработчики используют API на JavaScript для обучения, загрузки и запуска моделей.

Позже TensorFlow.js была расширена для работы с Node.js, для этого применяется библиотечное дополнение tfjs-node .

Импорт имеющихся моделей в TensorFlow.js

Готовые модели TensorFlow и Keras можно выполнять при помощи библиотеки TensorFlow.js. Перед выполнением модели необходимо перевести в новый формат при помощи этого инструмента. Предобученные и преобразованные модели для классификации изображений, определения поз и обнаружения k-ближайших соседей доступны на Github.

Использование TensorFlow.js с Node.js

Установка библиотек TensorFlow

TensorFlow.js можно установить из реестра NPM.

npm install @tensorflow/tfjs @tensorflow/tfjs-node
// или.
npm install @tensorflow/tfjs @tensorflow/tfjs-node-gpu

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

Загрузка библиотек TensorFlow

API на JavaScript для Tensorflow предоставляется из core-библиотеки. В модулях-расширениях, обеспечивающих поддержку Node.js, дополнительные API не предоставляются.

Загрузка моделей TensorFlow

В TensorFlow.js предоставляется библиотека NPM ( tfjs-models ), упрощающая загрузку предобученных и преобразованных моделей для классификации изображений, определения поз и обнаружения k-ближайших соседей.

Модель MobileNet для классификации изображений – это глубокая нейронная сеть, обученная различать 1000 различных классов изображений.

В файле README к проекту в качестве примера приведен следующий код, используемый для загрузки модели.


Одна из первых проблем, с которыми мне довелось столкнуться – оказывается, этот код не работает с Node.js.

Error: browserHTTPRequest is not supported outside the web browser.

Изучив исходный код, видим, что библиотека mobilenet – это обертка для класса tf.Model . При вызове метод load() автоматически загружает нужные файлы моделей, расположенные по внешнему HTTP-адресу, и инстанцирует модель TensorFlow.

Расширение Node.js на момент написания статьи еще не поддерживало HTTP-запросы для динамического извлечения моделей. Оставалось только вручную загружать модели в файловую систему.

Однако, вчитавшись в исходный код библиотеки, я нашел обходной путь…

Загрузка моделей из файловой системы

В случае, если класс MobileNet создается вручную, можно не вызывать метод load модуля, а перезаписать автоматически генерируемую переменную path , содержащую HTTP-адрес модели, заменив этот адрес на локальный путь в файловой системе. После этого при вызове метода load в экземпляре класса будет срабатывать класса загрузчика файловой системы; в таком случае мы отказываемся от использования браузерного HTTP-загрузчика.

Круто, все работает!

Но откуда же берутся файлы моделей?

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

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

В исходном коде указано, что только модели версии MobileNet v1 можно загружать при помощи библиотеки tensorflow-models/mobilenet .

Код извлечения по HTTP загружает файл model.json из места хранения, а затем рекурсивно выбирает все фрагменты моделей с весовыми коэффициентами, на которые стоят ссылки. Это файлы в формате groupX-shard1of1 .

Скачивание моделей вручную

Если нужно сохранить все файлы моделей в файловой системе, то можно поступить так: извлечь конфигурационный файл модели, разобрать синтаксис всех весовых файлов, на которые стоят ссылки в конфигурационном файле, после чего скачать каждый весовой файл вручную.
Я собирался использовать модуль MobileNet V1 с альфа-значением 1.0 и изображение размером 224 пиксела. Так я получаю следующий URL для конфигурационного файла модели.

Мастер Йода рекомендует:  Как Роскомнадзор будет взаимодействовать с VPN-сервисами и анонимайзерами

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

При помощи инструмента sed можно поставить перед именем каждого элемента HTTP URL, чтобы сгенерировать URL для каждого весового файла.

Команды parallel и curl позволяют затем скачать все эти файлы в мой локальный каталог.

cat model.json | jq -r «.weightsManifest[].paths[0]» | sed ‘s/^/https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224//’ | parallel curl -O

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

Это не работает в Node.js из-за отсутствия поддержки DOM.

Метод classify принимает разнообразные элементы DOM ( canvas , video , image ) и автоматически извлекает и преобразует «картиночные» байты из этих элементов в класс tf.Tensor3D , используемый в качестве ввода модели. В качестве альтернативы входную информацию tf.Tensor3D можно передавать напрямую.

Я решил не пытаться использовать внешний пакет для имитации DOM-элемента вручную, а обнаружил, что tf.Tensor3D проще собрать вручную.

Генерируем Tensor3D из изображения


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

pixels – это двухмерный массив типа (Int32Array) , содержащий последовательный список канальных значений для каждого пиксела. numChannels – это количество канальных значений на пиксел.

Создание входных значений для JPEG

Библиотека jpeg-js – это JPEG-кодировщик/декодировщик для Node.js, написанный на чистом JavaScript. При помощи этой библиотеки можно извлечь RGB-значения для каждого пиксела.

В результате получим Uint8Array с четырьмя канальными значениями ( RGBA ) на каждый пиксел ( width * height ). В модели MobileNet для классификации используется всего три цветовых канала ( RGB ), альфа-канал игнорируется. Этот код преобразует четырехканальный массив в верную трехканальную версию.

Требования ко входным значениям для моделей MobileNet

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

Входные значения для изображений с другой размерностью перед классификацией нужно пересчитать в правильный размер. Кроме того, пиксельные значения, получаемые от JPEG-декодера, находятся в диапазоне 0 — 255, а не -1 — 1. Эти значения также необходимо преобразовать перед классификацией.

В TensorFlow.js есть библиотечные методы, упрощающие этот процесс, но, что еще лучше, есть специальная библиотека tfjs-models/mobilenet , автоматически решающая эту проблему!

Разработчик может передавать входные Tensor3D типа int32 , а также различные размерности методу classify , который перед классификацией переводит входные значения в правильный формат. То есть, нам здесь ничего делать не приходится. Супер!

Модели MobileNet в Tensorflow обучаются распознаванию объектов из 1000 важнейших классов из множества данных ImageNet. На выходе модели дают вероятностные значения, характеризующие, каковы шансы найти данные объекты на классифицируемом изображении.

Полный список обученных классов для используемой модели находится в этом файле.

Библиотека tfjs-models/mobilenet предлагает метод classify в классе MobileNet , возвращающий топ-X наиболее вероятных классов, исходя из того, что изображено на картинке.

predictions – это массив из X классов и вероятностей в следующем формате.

Итак, мы разобрались, как использовать библиотеку TensorFlow.js и модели MobileNet в Node.js, а теперь рассмотрим, как этот скрипт классифицирует изображение, заданное в качестве аргумента командной строки.

Сохраните этот файл скрипта и дескриптор пакета в локальных файлах.

Скачайте файлы модели в каталог mobilenet, следуя вышеизложенным инструкциям.
Установите зависимости проекта при помощи NPM

Скачайте образец JPEG-файла для классификации

wget http://bit.ly/2JYSal9 -O panda.jpg

Запустите скрипт, аргументами которого послужат файл модели и входное изображение.

node script.js mobilenet/model.json panda.jpg

Если все сработало верно, то в консоли должен появиться следующий вывод.

Изображение верно классифицировано как содержащее панду с вероятностью 99.93%!


Парсер Хабра

Вас тоже достает, когда автор переносит топик в черновик?

четверг, 13 декабря 2020 г.

[Перевод] Машинное обучение с Node.js при помощи библиотеки Tensorflow.js

Возможно, поклонники библиотеки Tensorflow, уже заметившие у нас в предзаказе эту книгу, также присматривались к возможностям машинного и глубокого обучения в браузере, тем более, что тему не обошел вниманием и сам Франсуа Шолле. Интересующихся приглашаем под кат, где рассказано, как при помощи библиотеки Tensorflow.js распознаются изображения.

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

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

Tensorflow.js начиналась как фронтендовая библиотека для работы в браузере, но в этом году в нее была добавлена экспериментальная поддержка Node.js. Таким образом, TensorFlow.js можно использовать и в бэкендовых приложениях на JavaScript, что совершенно избавляет нас от необходимости прибегать к Python.

Читая об этой библиотеке, я решил испробовать ее на простой задаче…

Использовать TensorFlow.js для визуального распознавания образов на изображениях при применении JavaScript из Node.js

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

Однако, через несколько дней долбежки я все-таки это сделал! Ура!

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

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

Это библиотека, выпущенная Google в ноябре 2015, исходно была написана на Python. Для обучения и оценки создаваемых моделей в ней применяются вычисления на CPU или GPU. Изначально эта библиотека создавалась для работы на высокопроизводительных серверах с использованием ресурсозатратных GPU.

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

Tensorflow Lite, облегченная версия этой библиотеки для мобильных устройств и встраиваемых систем, была выпущена в мае 2020 года. Вместе с ней предоставляется новый набор предобученных глубоких моделей для задач, связанных с распознаванием образов; эта коллекция именуется MobileNet. Модели MobileNet были разработаны специально для эффективной работы в окружениях с ограниченным количеством ресурсов, например, на мобильных устройствах.

Вслед за Tensorflow Lite в марте 2020 года была анонсирована TensorFlow.js. Эта версия библиотеки предназначена для работы в браузере и базируется на более раннем проекте под названием deeplearn.js. WebGL обеспечивает GPU-доступ к библиотеки. Разработчики используют API на JavaScript для обучения, загрузки и запуска моделей.

Позже TensorFlow.js была расширена для работы с Node.js, для этого применяется библиотечное дополнение tfjs-node .

Импорт имеющихся моделей в TensorFlow.js

Готовые модели TensorFlow и Keras можно выполнять при помощи библиотеки TensorFlow.js. Перед выполнением модели необходимо перевести в новый формат при помощи этого инструмента. Предобученные и преобразованные модели для классификации изображений, определения поз и обнаружения k-ближайших соседей доступны на Github.

Использование TensorFlow.js с Node.js

Установка библиотек TensorFlow


TensorFlow.js можно установить из реестра NPM.

npm install @tensorflow/tfjs @tensorflow/tfjs-node
// или.
npm install @tensorflow/tfjs @tensorflow/tfjs-node-gpu

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

Загрузка библиотек TensorFlow

API на JavaScript для Tensorflow предоставляется из core-библиотеки. В модулях-расширениях, обеспечивающих поддержку Node.js, дополнительные API не предоставляются.

Загрузка моделей TensorFlow

В TensorFlow.js предоставляется библиотека NPM ( tfjs-models ), упрощающая загрузку предобученных и преобразованных моделей для классификации изображений, определения поз и обнаружения k-ближайших соседей.

Модель MobileNet для классификации изображений – это глубокая нейронная сеть, обученная различать 1000 различных классов изображений.

В файле README к проекту в качестве примера приведен следующий код, используемый для загрузки модели.

Одна из первых проблем, с которыми мне довелось столкнуться – оказывается, этот код не работает с Node.js.

Мастер Йода рекомендует:  20 свежих инструментов для разработчиков Javascript

Error: browserHTTPRequest is not supported outside the web browser.

Изучив исходный код, видим, что библиотека mobilenet – это обертка для класса tf.Model . При вызове метод load() автоматически загружает нужные файлы моделей, расположенные по внешнему HTTP-адресу, и инстанцирует модель TensorFlow.

Расширение Node.js на момент написания статьи еще не поддерживало HTTP-запросы для динамического извлечения моделей. Оставалось только вручную загружать модели в файловую систему.

Однако, вчитавшись в исходный код библиотеки, я нашел обходной путь…

Загрузка моделей из файловой системы

В случае, если класс MobileNet создается вручную, можно не вызывать метод load модуля, а перезаписать автоматически генерируемую переменную path , содержащую HTTP-адрес модели, заменив этот адрес на локальный путь в файловой системе. После этого при вызове метода load в экземпляре класса будет срабатывать класса загрузчика файловой системы; в таком случае мы отказываемся от использования браузерного HTTP-загрузчика.

Круто, все работает!

Но откуда же берутся файлы моделей?

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

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

В исходном коде указано, что только модели версии MobileNet v1 можно загружать при помощи библиотеки tensorflow-models/mobilenet .

Код извлечения по HTTP загружает файл model.json из места хранения, а затем рекурсивно выбирает все фрагменты моделей с весовыми коэффициентами, на которые стоят ссылки. Это файлы в формате groupX-shard1of1 .

Скачивание моделей вручную

Если нужно сохранить все файлы моделей в файловой системе, то можно поступить так: извлечь конфигурационный файл модели, разобрать синтаксис всех весовых файлов, на которые стоят ссылки в конфигурационном файле, после чего скачать каждый весовой файл вручную.
Я собирался использовать модуль MobileNet V1 с альфа-значением 1.0 и изображение размером 224 пиксела. Так я получаю следующий URL для конфигурационного файла модели.


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

При помощи инструмента sed можно поставить перед именем каждого элемента HTTP URL, чтобы сгенерировать URL для каждого весового файла.

Команды parallel и curl позволяют затем скачать все эти файлы в мой локальный каталог.

cat model.json | jq -r «.weightsManifest[].paths[0]» | sed ‘s/^/https:\/\/storage.googleapis.com\/tfjs-models\/tfjs\/mobilenet_v1_1.0_224\//’ | parallel curl -O

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

Это не работает в Node.js из-за отсутствия поддержки DOM.

Метод classify принимает разнообразные элементы DOM ( canvas , video , image ) и автоматически извлекает и преобразует «картиночные» байты из этих элементов в класс tf.Tensor3D , используемый в качестве ввода модели. В качестве альтернативы входную информацию tf.Tensor3D можно передавать напрямую.

Я решил не пытаться использовать внешний пакет для имитации DOM-элемента вручную, а обнаружил, что tf.Tensor3D проще собрать вручную.

Генерируем Tensor3D из изображения

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

pixels – это двухмерный массив типа (Int32Array) , содержащий последовательный список канальных значений для каждого пиксела. numChannels – это количество канальных значений на пиксел.

Создание входных значений для JPEG

Библиотека jpeg-js – это JPEG-кодировщик/декодировщик для Node.js, написанный на чистом JavaScript. При помощи этой библиотеки можно извлечь RGB-значения для каждого пиксела.

В результате получим Uint8Array с четырьмя канальными значениями ( RGBA ) на каждый пиксел ( width * height ). В модели MobileNet для классификации используется всего три цветовых канала ( RGB ), альфа-канал игнорируется. Этот код преобразует четырехканальный массив в верную трехканальную версию.

Требования ко входным значениям для моделей MobileNet

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

Входные значения для изображений с другой размерностью перед классификацией нужно пересчитать в правильный размер. Кроме того, пиксельные значения, получаемые от JPEG-декодера, находятся в диапазоне 0 — 255, а не -1 — 1. Эти значения также необходимо преобразовать перед классификацией.

В TensorFlow.js есть библиотечные методы, упрощающие этот процесс, но, что еще лучше, есть специальная библиотека tfjs-models/mobilenet , автоматически решающая эту проблему!

Разработчик может передавать входные Tensor3D типа int32 , а также различные размерности методу classify , который перед классификацией переводит входные значения в правильный формат. То есть, нам здесь ничего делать не приходится. Супер!

Модели MobileNet в Tensorflow обучаются распознаванию объектов из 1000 важнейших классов из множества данных ImageNet. На выходе модели дают вероятностные значения, характеризующие, каковы шансы найти данные объекты на классифицируемом изображении.

Полный список обученных классов для используемой модели находится в этом файле.

Библиотека tfjs-models/mobilenet предлагает метод classify в классе MobileNet , возвращающий топ-X наиболее вероятных классов, исходя из того, что изображено на картинке.

predictions – это массив из X классов и вероятностей в следующем формате.


Итак, мы разобрались, как использовать библиотеку TensorFlow.js и модели MobileNet в Node.js, а теперь рассмотрим, как этот скрипт классифицирует изображение, заданное в качестве аргумента командной строки.

Сохраните этот файл скрипта и дескриптор пакета в локальных файлах.

Скачайте файлы модели в каталог mobilenet, следуя вышеизложенным инструкциям.
Установите зависимости проекта при помощи NPM

Скачайте образец JPEG-файла для классификации

wget http://bit.ly/2JYSal9 -O panda.jpg

Запустите скрипт, аргументами которого послужат файл модели и входное изображение.

node script.js mobilenet/model.json panda.jpg

Если все сработало верно, то в консоли должен появиться следующий вывод.

Изображение верно классифицировано как содержащее панду с вероятностью 99.93%!

TensorFlow.js: машинное обучение на JavaScript с доставкой в браузер

5011 просмотра

1 ответ

115 Репутация автора

Недавно я начал программировать с помощью методов машинного обучения и переходил от машинного обучения к различным платформам. Фреймворками, с которыми я много работал, были Tensorflow (Python), Tensorflow.js и Brain.js . И у меня есть пара сомнений по поводу них.

  1. Почему большинство из них предпочитают Tensorflow (Python), а не Tensorflow.js. Что Tensorflow имеет то, чего нет в Tensorflow.js, что делает его особенным?
  2. Большинство людей, которых я видел в Интернете, предпочитают работать с Tensorflow.js, а не brain.js, хотя brain.js использует объекты JSON, что не мешает разработчику создавать Tensors, управлять памятью и т. Д. Почему люди предпочитают работать с Tensorflow.js, хотя brain.js легко реализовать?
  3. Если я создаю веб-сайт, который использует Node.js в качестве бэкэнда, то какая библиотека предпочтительнее для машинного обучения в долгосрочной перспективе? Tensorflow.js или Brain.js? или я должен использовать Tensorflow отдельно только для машинного обучения?

Я много искал по этим темам. И у меня пока нет хорошего объяснения моих сомнений. Так что ожидаем четкого и подробного объяснения 🙂

Ответы (1)

18 плюса

5120 Репутация автора

Скорости разные: Tensorflow> tfjs> brainjs. Python может быть напрямую скомпилирован в машинный код и напрямую использовать процессор и графический процессор, тогда как tfjs — это язык сценариев, который компилируется на клиенте и должен использовать в браузере для доступа к графическому процессору так же, как brain.js (я я не уверен, что brain.js ускоряется на GPU)

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

И если вы используете nodejs, единственная причина остаться с tfjs и не переключаться на python — это то, что вам больше нравится язык JavaScript или вы вынуждены его использовать, потому что вы работаете в бэкэнде JS.

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

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