TL;DR
Привет, читатели!
Я открыл новый проект 🤖 Интерактивные эксперименты по машинному обучению на GitHub. Каждый эксперимент состоит из 🏋️ записной книжки Jupyter / Colab (чтобы увидеть, как обучалась модель) и 🎨 демонстрационной страницы (чтобы увидеть модель в действии прямо в браузере).
Хотя модели могут показаться немного глупыми (помните, что это всего лишь эксперименты, а не готовый к производству код), они постараются сделать все возможное, чтобы:
- 🖌 Узнавайте цифры или наброски, которые вы рисуете в браузере.
- 📸 Обнаруживайте и распознавайте объекты, которые вы показываете на камеру
- 🌅 Классифицируйте загруженное изображение
- 📝 Напишите с вами стихотворение Шекспира
- ✊🖐✌️ Играйте с вами в игру "Камень-ножницы-бумага"
- и т.п.
Я обучил модели на Python, используя TensorFlow 2 с поддержкой Keras, а затем использовал их для демонстрации в браузере с помощью React и JavaScript версия Tensorflow.
Производительность моделей
⚠️ Во-первых, давайте сформулируем наши ожидания. Репозиторий содержит эксперименты по машинному обучению, а не готовый, многократно используемый, оптимизированный и доработанный код и модели. Это скорее песочница или площадка для обучения и опробования различных подходов, алгоритмов и наборов данных машинного обучения. Модели могут не работать хорошо, и есть место для переобучения / недообучения.
Поэтому иногда можно увидеть такие вещи:
Но будьте терпеливы, иногда модель может стать умнее 🤓 и дать вам следующее:
Фон
Я инженер-программист и последние несколько лет занимаюсь в основном фронтенд- и бэкэнд-программированием. В свободное время, в качестве хобби, я решил углубиться в темы машинного обучения, чтобы сделать его менее магическим и больше похожим на математику.
- 🗓 Поскольку Python может быть хорошим выбором для начала экспериментов с машинным обучением, я решил сначала изучить его базовый синтаксис. В результате появился проект 🐍 Playground and Cheatsheet for Learning Python. Это было просто для того, чтобы попрактиковаться в Python и в то же время иметь шпаргалку с базовым синтаксисом, когда он мне понадобится (для таких вещей, как
dict_via_comprehension = {x: x**2 for x in (2, 4, 6)}
и т. Д.). - 🗓 Немного изучив Python, я хотел углубиться в основы математики, лежащие в основе машинного обучения. Итак, после прохождения великолепного Курса машинного обучения от Эндрю Нг на Coursera, появился проект 🤖 Самодельное машинное обучение. На этот раз речь шла о создании шпаргалки по базовым математическим алгоритмам машинного обучения, таким как линейная регрессия, логистическая регрессия, k-средних, многослойный персептрон и т. Д.
- 🗓 Следующей попыткой поиграть с базовой математикой машинного обучения была 🤖 NanoNeuron. Это было около 7 простых функций JavaScript, которые должны были дать вам представление о том, как машины на самом деле могут учиться.
- 🗓 Завершив еще одну замечательную Специализацию по глубокому обучению от Эндрю Нг на Coursera, я решил немного попрактиковаться с многослойными перцептронами, сверточными и рекуррентными нейронными сетями (CNN и RNN). На этот раз вместо того, чтобы реализовывать все с нуля, я решил начать использовать какой-нибудь фреймворк машинного обучения. В итоге я использовал TensorFlow 2 с 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 Layers я использовал Конвертер TensorFlow.js. Это может быть неэффективно для передачи всей модели (мегабайтов данных) в браузер вместо того, чтобы делать прогнозы через HTTP-запросы, но опять же, помните, что это просто эксперименты, а не готовый к производству код и архитектура. Я хотел избежать выделенной серверной службы, чтобы упростить архитектуру.
- 👨🏻🎨 Демонстрационное приложение было создано на React с использованием стартера create-react-app со стандартным вариантом Flow для проверки типов.
- 💅🏻 Для стилизации я использовал Material UI. Это было, как говорится, убить сразу двух зайцев и опробовать новый стилевой фреймворк (простите, Bootstrap 🤷🏻).
Эксперименты
Короче говоря, вы можете получить доступ к демонстрационной странице и записным книжкам Jupyter по этим ссылкам:
- 🎨 Запустить демонстрацию экспериментов с машинным обучением
- 🏋️ Проверить эксперименты с ML на ноутбуках Jupyter
Эксперименты с многослойным персептроном (MLP)
Многослойный персептрон (MLP) - это класс искусственной нейронной сети с прямой связью (ИНС). Многослойные перцептроны иногда называют ванильными нейронными сетями (состоящими из нескольких слоев перцептронов), особенно когда они имеют единственный скрытый слой.
Распознавание рукописных цифр
Вы рисуете цифру, и модель пытается ее распознать.
Распознавание рукописных эскизов
Вы рисуете эскиз, и модель пытается его распознать.
Эксперименты со сверточными нейронными сетями (CNN)
Сверточная нейронная сеть (CNN или ConvNet) - это класс глубоких нейронных сетей, наиболее часто используемых для анализа визуальных образов (фотографий, видео). Они используются для обнаружения и классификации объектов на фото и видео, переноса стиля, распознавания лиц, оценки позы и т. Д.
Распознавание рукописных цифр (CNN)
Вы рисуете цифру, и модель пытается ее распознать. Этот эксперимент похож на эксперимент из раздела MLP, но он использует CNN под капотом.
Распознавание рукописных эскизов (CNN)
Вы рисуете эскиз, и модель пытается его распознать. Этот эксперимент похож на эксперимент из раздела MLP, но он использует CNN под капотом.
Камень-ножницы-бумага (CNN)
Вы играете с моделью в игру «Камень-ножницы-бумага». В этом эксперименте используется CNN, обученная с нуля.
Камень, ножницы для бумаги (MobilenetV2)
Вы играете с моделью в игру Камень-ножницы-бумага. Эта модель использует трансферное обучение и основана на MobilenetV2.
Обнаружение объектов (MobileNetV2)
Вы показываете модели свое окружение через камеру, и она пытается обнаружить и распознать объекты. Эта модель использует трансферное обучение и основана на MobilenetV2.
Классификация изображений (MobileNetV2)
Вы загружаете картинку, и модель пытается классифицировать ее в зависимости от того, что она видит на картинке. Эта модель использует трансферное обучение и основана на MobilenetV2.
Эксперименты с рекуррентными нейронными сетями (RNN)
Рекуррентная нейронная сеть (RNN) - это класс глубоких нейронных сетей, который чаще всего применяется к последовательностным данным, таким как речь, голос, текст или музыка. Они используются для машинного перевода, распознавания речи, синтеза голоса и т. Д.
Суммирование чисел
Вы вводите выражение суммирования (т. Е. 17+38
), и модель предсказывает результат (т. Е. 55
). Интересно то, что модель обрабатывает входные данные как последовательность, что означает, что она узнала, что когда вы вводите последовательность 1
→ 17
→ 17+
→ 17+3
→ 17+38
, она «переводит» ее в другую последовательность 55
. Вы можете думать об этом как о переводе последовательности с испанского Hola
на английский Hello
.
Генерация текста Шекспира
Вы начинаете печатать стихотворение, как Шекспир, а модель продолжит его, как Шекспир. По крайней мере, он попытается это сделать.
Генерация текста Википедии
Вы начинаете печатать статью Wiki, а модель пытается продолжить ее.
Планы на будущее
Как я уже упоминал выше, основная цель репозитория - быть больше похожей на площадку для обучения, чем для готовых к производству моделей. Поэтому основной план - продолжить обучение и экспериментировать с задачами и подходами глубокого обучения. Следующие интересные задачи для игры могут быть:
- Обнаружение эмоций
- Перенос стиля
- Языковой перевод
- Создание изображений (например, рукописных цифр)
- и т.п.
Еще одна интересная возможность - настроить существующие модели, чтобы сделать их более производительными. Я считаю, что это может дать лучшее понимание того, как преодолеть переоснащение и недостаточное оснащение и что делать с моделью, если она просто застряла на 60%
уровне точности как для обучающих, так и для проверочных наборов и больше не хочет улучшаться 🤔.
В любом случае, я надеюсь, что вы можете найти какие-то полезные идеи для обучения моделей из репозитория или, по крайней мере, повеселиться, играя с демонстрациями!
Удачного обучения! 🤖