ИИ в JS с tensorflow.js

машинное обучение TensorFlow

ИИ в JS с tensorflow.js (перевод)

Из https://javascriptweekly.com/link/57596/a956973cda

большое спасибоSeth Juarezпредусмотрены настоящей статьей.

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

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

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

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

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

Обработать

Хотя основной целью этой статьи не является изучение того, как эти алгоритмы реализованы, очень важно понимать основной процесс и основные результаты их применения в реальных программах (в этой статье в качестве примера используется JS). Исследователи данных часто используют следующие шаги:

  1. определить проблему (определить номера);
  2. заданные данные (набор данных MNIST);
  3. Создавать оптимальные модели (тезисы актуального функционала);
  4. Применение модели

Наша работа как разработчиков находится между этапами 3 и 4.

Модель

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

TensorFlow.js

Здесь я хотел бы напомнить всем, что я не считаю себя экспертом JS, поэтому, если я ошибаюсь или у меня есть лучшее решение, дайте мне знать. Цель этого раздела — показать вам, как использовать модели в приложениях JavaScript, мы будем использоватьTensorFlow.js, который рекламируется как платформа для обучения и развертывания моделей машинного обучения, и мы сосредоточимся на части развертывания, поскольку, как правило, большинство моделей создаются специалистами по данным с использованием полнофункционального пакета Python TensorFlow. Я признаю, что в некоторых случаях перенос обучения на стороне клиента звучит очень интересно.

Процесс создания модели и преобразования ее в TensorFlow.js по-прежнему очень прост (здесь не рассматривается, но это очень интересное упражнение, я предлагаю вам сделать это, когда у вас будет возможность), см.GitHub.com/Сет Хуарес/…)

Теперь давайте начнем практический пример:

В данном случае я решил использовать vue.js. Потому что у меня есть некоторый опыт работы с фреймворками и у меня уже есть (компонент)[код spray.IO/получить расцвет…] выполняет большую часть работы по рисованию холста.

code

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

  1. модель нагрузки
  2. вызов модели

Давайте рассмотрим их по очереди:

загрузочный модуль

Создание компонента vue кажется хорошей идеей, потому что я могу загрузить модель один раз для всего компонента и сохранить ее в памяти.

    mounted: async function () {
        ... other things...
        // load model
        const MODEL = 'model/tensorflowjs_model.pb';
        const WEIGHTS = 'model/weights_manifest.json';
        this.model = await tf.loadFrozenModel(MODEL, WEIGHTS);
    }

Я думаю, что могу выбрать другой хук в жизненном цикле vue, но в настоящее времяmountedвыглядит неплохо. однаждыthis.modelмонтируется всякий раз, когдаPredictПри нажатии кнопки модель будет использоваться. (Другое интересное явление заключается в том, что когда мышь поднимается, модель также будет использовать ее для прогнозирования).

вызывающий модуль

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

    predict: async function() {
            const digit = this.getDigit();
            const d = tf.tensor1d(digit).reshape([1, digit.length]);
            this.probabilities = await this.model.execute({'x': d}).reshape([10]).data();
            this.prediction = this.probabilities.indexOf(Math.max(...this.probabilities));
        }

getDigit()Метод получает нарисованное от руки изображение и делает две вещи:

  1. Уменьшить изображение до 28*28
  2. Получить массив числовых типов и передать его в модель

Ключевой вызовthis.model.execute(…). Здесь мы фактически передаем массив и заставляем модель работать. Выход модели представляет собой массив длины 10, содержащий вероятность появления каждой цифры. Другими словами, по индексу 0 в массиве находится вероятность того, что он думает, что число равно 0 (и так далее).

думать

Хотя в этой статье не рассматриваются подробности создания этого приложения, ее цель — дать вам представление о том, как использовать модели машинного обучения в современном JavaScript с помощью TensorFlow.js.

Чтобы узнать больше о TensorFlow.js, перейдите по ссылке [GitHub.com/frontend9/…]

Чтобы узнать больше, перейдите в репозиторий github [GitHub.com/Сет Хуарес/…]