Рубрики
Без рубрики

🤖 Интерактивные Эксперименты По Машинному обучению

Это коллекция интерактивных экспериментов по машинному обучению. Каждый эксперимент состоит из 🏋️ записной книжки Jupiter/Colab (чтобы увидеть, как была обучена модель) и 🎨 демонстрационной страницы (чтобы увидеть модель в действии прямо в вашем браузере).

Автор оригинала: Oleksii Trekhleb.

TL;DR

Эй, читатели!

Я открыл новый 🤖 Интерактивные эксперименты по машинному обучению проект на GitHub. Каждый эксперимент состоит из 🏋️ Jupiter/Colab notebook (чтобы увидеть, как была обучена модель) и 🎨 демонстрационной страницы (чтобы увидеть модель в действии прямо в вашем браузере).

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

  • 🖌 Распознавание цифр или эскизов, которые вы рисуете в своем браузере
  • 📸 Обнаружение и распознавание объектов, которые вы будете показывать на камеру
  • 🌅 Классифицируйте загруженное изображение
  • 📝 Напишите с собой стихотворение Шекспира
  • ✊ 🖐 ✌️ Поиграем с вами в игру Камень-Ножницы-бумага
  • и т.д.

Я обучил модели на Python с использованием TensorFlow 2 с поддержкой Keras , а затем использовал их для демонстрации в браузере с использованием React и JavaScript версии Tensorflow .

Интерактивные Эксперименты по Машинному обучению

Производительность моделей

⚠️ Во-первых, давайте определим наши ожидания.️ Репозиторий содержит машинное обучение эксперименты и не готовый к производству, многоразовый, оптимизированный и точно настроенный код и модели. Это скорее песочница или игровая площадка для изучения и опробования различных подходов к машинному обучению, алгоритмов и наборов данных. Модели могут работать не очень хорошо, и есть место для переоснащения/недооснащения.

Поэтому иногда вы можете видеть такие вещи, как это:

Тупая модель

Но будьте терпеливы, иногда модель может стать умнее и дать вам это:

Умная модель

Фон

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

  1. 🗓 Поскольку Python может быть хорошим выбором для начала экспериментов с машинным обучением, я решил сначала изучить его базовый синтаксис. В результате вышла 🐍 Игровая площадка и шпаргалка для изучения Python проект. Это было просто для того, чтобы практиковать Python и в то же время иметь чит-лист базового синтаксиса, как только он мне понадобится (для таких вещей, как dict_via_comprehension = {x: x**2 для x в (2, 4, 6)} и т.д.).

  2. 🗓 Немного изучив Python, я хотел углубиться в основы математики машинного обучения. Итак, после прохождения потрясающего курса машинного обучения Эндрю Нг на Coursera 🤖 Домашнее машинное обучение вышел проект. На этот раз речь шла о создании шпаргалки для базовых математических алгоритмов машинного обучения, таких как линейная регрессия, логистическая регрессия, k-средние, многослойный персептрон и т. Д.

  3. 🗓 Следующей попыткой поиграть с базовой математикой машинного обучения была 🤖 Nanoneuro . Речь шла о 7 простых функциях JavaScript, которые должны были дать вам представление о том, как машины на самом деле могут “учиться”.

  4. 🗓 После окончания еще одной потрясающей Специализации по глубокому обучению Эндрю Нг на Coursera я решил немного попрактиковаться с многослойными персептронами , сверточными и рекуррентными нейронными сетями (CNNs и RNNs). На этот раз вместо того, чтобы внедрять все с нуля, я решил начать использовать некоторые рамки машинного обучения. В итоге я использовал TensorFlow 2 с Keras . Я также не хотел слишком сосредотачиваться на математике (позволяя фреймворку делать это за меня), и вместо этого я хотел придумать что-то более практичное, применимое и что-то, с чем я мог бы попробовать поиграть прямо в своем браузере. В результате появились новые 🤖 Интерактивные эксперименты по машинному обучению , которые я хочу описать здесь немного подробнее.

Тек-стек

Обучение моделям

  • 🏋🏻 ‍ Я использовал Keras внутри TensorFlow 2 для моделирования и обучения. Поскольку у меня не было опыта работы с фреймворками машинного обучения, мне нужно было с чего-то начать. Одним из пунктов продажи в пользу TensorFlow было то, что у него есть как Python, так и JavaScript библиотеки с аналогичным API. Поэтому в конце концов я использовал версию Python для обучения и версию JavaScript для демонстраций.

  • 🏋🏻 ‍ Я обучал модели TensorFlow на Python внутри Jupyter ноутбуков локально и иногда использовал Colab , чтобы ускорить обучение на GPU.

  • 💻 Большинство моделей были обучены на старом добром процессоре Macbook Pro (двухъядерный процессор Intel Core i5 с частотой 2,9 ГГц).

  • 🔢 Конечно, вы не можете убежать от NumPy для операций с матрицами/тензорами.

Демонстрация моделей

  • 🏋🏻 ‍ Я использовал TensorFlow.js делать прогнозы с ранее обученными моделями.

  • ♻️ Для преобразования Keras HDF5 моделей в TensorFlow.js Слои формат, который я использовал TensorFlow.js конвертер . Это может быть неэффективно для передачи всей модели (мегабайт данных) в браузер вместо того, чтобы делать прогнозы с помощью HTTP-запросов, но опять же, помните, что это всего лишь эксперименты, а не готовый к производству код и архитектура. Я хотел избежать наличия выделенного серверного сервиса, чтобы упростить архитектуру.

  • 👨🏻‍🎨 Демонстрационное приложение было создано на React с использованием create-react-app starter с настройкой по умолчанию Flow для проверки типа.

  • 💅 🏻 Для стилизации я использовал/| Material UI/|. Это было, как говорится, “убить двух птиц” сразу и опробовать новый фреймворк стиля (извините, Bootstrap 🤷 🏻 ).

Эксперименты

Короче говоря, вы можете получить доступ к демо-странице и записным книжкам Jupyter по этим ссылкам:

Эксперименты с многослойным персептроном (MLP)

A многослойный персептрон (MLP) является классом прямой искусственной нейронной сети (ANN). Многослойные персептроны иногда называют “ванильными” нейронными сетями (состоящими из нескольких слоев персептронов), особенно когда они имеют один скрытый слой.

Распознавание рукописных цифр

Вы рисуете цифру, и модель пытается ее распознать.

Распознавание рукописных цифр

Распознавание рукописных эскизов

Вы рисуете эскиз, и модель пытается его распознать.

Распознавание рукописных эскизов

Эксперименты с сверточными нейронными сетями (CNN)

Сверточная нейронная сеть (CNN или ConvNet) – это класс глубоких нейронных сетей, наиболее часто применяемых для анализа визуальных изображений (фотографий, видео). Они используются для обнаружения и классификации объектов на фотографиях и видео, передачи стиля, распознавания лиц, оценки позы и т.д.

Распознавание рукописных цифр (CNN)

Вы рисуете цифру, и модель пытается ее распознать. Этот эксперимент похож на эксперимент из раздела MLP, но он использует CNN под капотом.

Распознавание рукописных цифр (CNN)

Распознавание рукописных эскизов (CNN)

Вы рисуете эскиз, и модель пытается его распознать. Этот эксперимент похож на эксперимент из раздела MLP, но он использует CNN под капотом.

Распознавание рукописных эскизов (CNN)

Камень Ножницы-бумага (CNN)

Вы играете в игру “Камень-ножницы-бумага” с моделью. В этом эксперименте используется CNN, который обучается с нуля.

Камень Ножницы-бумага (CNN)

Камень Ножницы для бумаги (Мобильная сеть V2)

Вы играете в игру “Камень-ножницы-бумага” с моделью. Эта модель использует обучение передаче и основана на Mobile net V2 .

Камень Ножницы для бумаги (Мобильная сеть V2)

Обнаружение объектов (Мобильная сеть V2)

Вы показываете модели свое окружение через камеру, и она попытается обнаружить и распознать объекты. Эта модель использует обучение передаче и основана на Mobile net V2 .

Обнаружение объектов (Мобильная сеть V2)

Классификация изображений (MobileNetV2)

Вы загружаете изображение, и модель пытается классифицировать его в зависимости от того, что она “видит” на изображении. Эта модель использует обучение передаче и основана на Mobile net V2 .

Классификация изображений (MobileNetV2)

Эксперименты с рекуррентными нейронными сетями (RNN)

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

Суммирование чисел

Вы вводите выражение суммирования (т. Е. 17+38 ), и модель предсказывает результат (т. е. 55 ). Интересная часть здесь заключается в том , что модель обрабатывает входные данные как последовательность , то есть она узнала, что при вводе последовательности 11717+17+317+38 он “переводит” его в другую последовательность 55 . Вы можете думать об этом как о переводе испанской Hola последовательности на английский Hello .

Суммирование чисел

Генерация текста Шекспира

Вы начинаете печатать стихотворение, как Шекспир, и модель продолжит его, как Шекспир. По крайней мере, он попытается это сделать”.

Генерация текста Шекспира

Генерация текста в Википедии

Вы начинаете вводить вики-статью, и модель пытается продолжить ее.

Генерация текста в Википедии

Планы на будущее

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

  • Обнаружение эмоций
  • Передача стиля
  • Языковой перевод
  • Генерация изображений (т. Е. рукописных чисел)
  • и т.д.

Еще одной интересной возможностью было бы настроить существующие модели, чтобы сделать их более производительными . Я считаю, что это может дать лучшее понимание того, как преодолеть переобучение и недостаточное оснащение и что делать с моделью, если она просто застряла на 60% уровне точности как для наборов обучения, так и для наборов проверки и больше не хочет улучшаться..

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

Счастливого обучения! 🤖