- Регистрация
- 12.04.17
- Сообщения
- 19.095
- Реакции
- 107
- Репутация
- 0
Вкратце
Я создал новый проект
Несмотря на то, что машинные модели в репозитории могут быть немного "туповатенькими" (помните, это всего-лишь эксперименты, а не вылизанный код, готовый к "заливке на продакшн" и дальнейшему управлению новыми Tesla), они будут стараться как могут чтобы:
Я тренировал модели на Python с использованием TensorFlow 2 с поддержкой Keras. Для демо-приложения я использовал React и JavaScript версию Tensorflow.
Производительность моделей
Для начала, давайте определимся с нашими ожиданиями.️ Репозиторий содержит эксперименты с машинным обучением, а не готовые к "заливке на продакшн", оптимизированные и тонко настроенные модели. Этот проект скорее похож на песочницу, в которой можно учиться и тренироваться работе с алгоритмами машинного обучения и разными наборами данных. Обученные модели могут быть недостаточно точными (например, иметь 60% точности вместо ожидаемых, пускай, 97%), а также могу быть переученными и недоученными (overfitting vs underfitting).
Поэтому иногда вы можете увидеть что-то вроде:
Но будьте терпеливы, иногда эта же модель может выдавать что-то более "умное":
Предыстория
Я
Технологический стек
Тренировка моделей
Демонстрация моделей
Эксперименты
Демо-страничка с экспериментами, а также Jupyter ноутбуки с деталями тренировки доступны по следующим ссылкам:
Эксперименты с многослойным перцептроном (Multilayer Perceptron, MLP)
Распознавание цифр
Вы рисуете цифру, а модель пытается ее распознать.
Распознавание эскизов
Вы рисуете эскиз, а модель пытается его распознать.
Эксперименты со сверточными нейронными сетями (Convolutional Neural Network, CNN)
Распознавание цифр (CNN)
Вы рисуете цифру, а модель пытается ее распознать. Этот эксперимент похож на предыдущий из раздела MLP, но на этот раз модель использует CNN.
Распознавание эскизов (CNN)
Вы рисуете эскиз, а модель пытается его распознать. Этот эксперимент похож на предыдущий из раздела MLP, но на этот раз модель использует CNN.
Камень-Ножницы-Бумага (CNN)
Вы играете в камень-ножницы-бумагу с моделью. Этот эксперимент использует CNN, натренированную с нуля.
Rock Paper Scissors (MobilenetV2)
Вы играете в камень-ножницы-бумагу с моделью. Эта модель использует трансферное обучение, основанное на сети
Распознавание объектов (MobileNetV2)
Вы показываете модели ваше окружение (используя камеру ноутбука или телефона), а модель пытается определить предметы на видео и распознать их. Эта модель использует сеть
Классификация изображений (MobileNetV2)
Вы загружаете изображение, а модель пытается его классифицировать в зависимости от того, что она "видит" на картинке. Модель использует сеть
Эксперименты с рекуррентными нейронными сетями (Recurrent Neural Networks, RNN)
Суммирование чисел
Вы набираете выражение (например, 17+38) и модель предсказывает результат (например 55). Интересность этой модели заключается в том, что она воспринимает выражение на входе, как последовательность символов (как текст). Модель учится "переводить" последовательность 1 → 17 → 17+ → 17+3 → 17+38 на входе в другую текстовую последовательность 55 на выходе. Считайте, что модель скорее делает перевод испанского Hola в английское Hello, чем оперирует математическими сущностями.
Генерация текста в стиле Шекспира
Вы начинаете поэму как Шекспир, а модель пытается ее продолжить как Шекспир. Ключевое слово "пытается" .
Генерация текста в стиле Wikipedia
Вы начинаете печатать Wiki статью, а модель продолжает.
Планы
Как я упомянул выше, главная задача
Другой интересной возможностью является более тонкая настройка уже имеющихся моделей, чтобы сделать их более точными. Мне кажется это может дать более глубокое понимание того, как преодолевать переученность/недоученность моделей и как поступать в случаях, когда точность модели застревает на 60% для тренировочных и валидационных данных и не хочет больше улучшаться.
В любом случае, я надеюсь, что вы найдете что-то полезное и интересное в
Успешного обучения!
Я создал новый проект
You must be registered for see links
на GitHub. Каждый эксперимент состоит из Jupyter/Colab ноутбука, показывающего как модель тренировалась, и Демо странички, показывающей модель в действии прямо в вашем браузере.Несмотря на то, что машинные модели в репозитории могут быть немного "туповатенькими" (помните, это всего-лишь эксперименты, а не вылизанный код, готовый к "заливке на продакшн" и дальнейшему управлению новыми Tesla), они будут стараться как могут чтобы:
- Распознать цифры и прочие эскизы, которые вы нарисуете в браузере
- Определить и распознать объекты на видео из вашей камеры
- Классифицировать изображения, загруженные вами
- Написать с вами поэму в стиле Шекспира
- И даже поиграть с вами в камень-ножницы-бумагу
- и пр.
Я тренировал модели на Python с использованием TensorFlow 2 с поддержкой Keras. Для демо-приложения я использовал React и JavaScript версию Tensorflow.

Производительность моделей
Для начала, давайте определимся с нашими ожиданиями.️ Репозиторий содержит эксперименты с машинным обучением, а не готовые к "заливке на продакшн", оптимизированные и тонко настроенные модели. Этот проект скорее похож на песочницу, в которой можно учиться и тренироваться работе с алгоритмами машинного обучения и разными наборами данных. Обученные модели могут быть недостаточно точными (например, иметь 60% точности вместо ожидаемых, пускай, 97%), а также могу быть переученными и недоученными (overfitting vs underfitting).
Поэтому иногда вы можете увидеть что-то вроде:

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

Предыстория
Я
You must be registered for see links
и последние несколько лет занимаюсь в основном full-stack программированием (веб-проекты). В свободное от работы время, в качестве хобби, я решил углубиться в тему машинного обучения, чтобы в первую очередь для себя-же сделать эту тему менее магической и более математической.- Поскольку Python мог быть хорошим выбором для того, чтобы начать экспериментировать с машинным обучением я решил изучить его базовый синтаксис. В результате появился проект
You must be registered for see links. Он был создан с одной стороны для того, чтобы практиковаться в написании кода на Python, а также в качестве "шпаргалки" с базовым синтаксисом, чтобы в нужный момент можно было быстро подсмотреть вещи наподобие dict_via_comprehension = {x: x**2 for x in (2, 4, 6)}.
- После ознакомления с Python-ом я хотел чуть больше углубиться в математическую часть машинного обучения. В итоге после прохождения замечательного
You must be registered for see linksот Andrew Ng на Coursera я создал проектYou must be registered for see links. Это была очередная "шпаргалка для себя-же" с базовыми алгоритмами машинного обучения, такими как линейная регрессия, логистическая регрессия, алгоритм k-средних, многослойный перцептрон (или персептрон?) и прочие.
- Моей следующей попыткой "поиграться в машинное обучение" стал
You must be registered for see links. Это были 7 простых JavaScript функций, которые должны были дать понимание читателю о том, как же машина все-таки может "учиться".
- После окончания очередного прекрасного
You must be registered for see linksот все того-же Andrew Ng на Coursera я решил больше попрактиковаться с многослойными перцептронами (multilayer perceptrons), сверточными и рекуррентными нейронными сетями (convolutional and recurrent neural networks). На этот раз, вместо того, чтобы реализовывать их с нуля я решил воспользоваться уже готовым фреймворком. В итоге я начал сYou must be registered for see linksс поддержкойYou must be registered for see links. Я так же не хотел фокусироваться на математике (позволив фреймворку сделать свое дело), вместо этого хотелось написать что-то более практичное и интерактивное, что-то, что можно было бы протестировать прямо в браузере телефона. В результате появился новый проектYou must be registered for see links, на котором я и хочу остановиться более детально в этой статье.
Технологический стек
Тренировка моделей
- Для тренировки моделей я использовал
You must be registered for see links, как частьYou must be registered for see links. Поскольку до этого у меня не было опыта с фреймворками для машинного обучения мне нужно было с какого-то из них начать. Один из ключевых факторов, который мне понравился в TensorFlow было наличие сразу двух его версий: версии на Python иYou must be registered for see links, у которых был схожий API. В итоге я использовал Python версия для тренировки, а JavaScript версию библиотека для демо-приложения.
- Я тренировал модели на Python внутри
You must be registered for see linksноутбуков локально. Иногда использовалYou must be registered for see links, чтобы воспользоваться GPU и тем самым ускорить тренировку.
- Большинство моделей были натренированы на CPU старого доброго MacBook Pro (2,9 GHz Dual-Core Intel Core i5).
- И конечно же было никак не обойтись без
You must be registered for see linksдля матричных (тензорных) операций.
Демонстрация моделей
- Я использовал
You must be registered for see linksдля того, чтобы воспользоваться в браузере заранее натренированными на предыдущем шаге (в Jupyter ноутбуке) моделями.
- Для конвертирования моделей из формата HDF5 в формат TensorFlow.js Layers я использовал
You must be registered for see links. Это конечно же может быть неэффективно загружать всю модель в браузер целиком (речь ведь идет о мегабайтах данных) вместо того, чтобы делать предсказания вызывая модель удаленно через HTTP запросы, но, снова-таки, вспомним, что речь идет об экспериментах, а не о зрелой и оптимизированной архитектуре, которую можно брать и сразу же использовать для "продакшна". С точки зрения простоты подхода я также хотел избежать развертывания отдельного сервера с HTTP API для предсказаний моделей.
-
You must be registered for see linksбыло создано наYou must be registered for see linksс использованиемYou must be registered for see linksстартера с поддержкойYou must be registered for see linksпо умолчания для проверки типов.
- Для стайлинга я воспользовался библиотекой
You must be registered for see links. Я хотел, как говориться, "убить двух зайцев сразу" и заодно попробовать новый для себя фреймворк для пользовательских интерфейсов (прости,You must be registered for see links).
Эксперименты
Демо-страничка с экспериментами, а также Jupyter ноутбуки с деталями тренировки доступны по следующим ссылкам:
-
You must be registered for see links
-
You must be registered for see links
Эксперименты с многослойным перцептроном (Multilayer Perceptron, MLP)
Распознавание цифр
Вы рисуете цифру, а модель пытается ее распознать.
-
You must be registered for see links
- ️
You must be registered for see links
- ️️
You must be registered for see links

Распознавание эскизов
Вы рисуете эскиз, а модель пытается его распознать.
-
You must be registered for see links
- ️
You must be registered for see links
- ️️
You must be registered for see links

Эксперименты со сверточными нейронными сетями (Convolutional Neural Network, CNN)
Распознавание цифр (CNN)
Вы рисуете цифру, а модель пытается ее распознать. Этот эксперимент похож на предыдущий из раздела MLP, но на этот раз модель использует CNN.
-
You must be registered for see links
- ️
You must be registered for see links
- ️️
You must be registered for see links

Распознавание эскизов (CNN)
Вы рисуете эскиз, а модель пытается его распознать. Этот эксперимент похож на предыдущий из раздела MLP, но на этот раз модель использует CNN.
-
You must be registered for see links
- ️
You must be registered for see links
- ️️
You must be registered for see links

Камень-Ножницы-Бумага (CNN)
Вы играете в камень-ножницы-бумагу с моделью. Этот эксперимент использует CNN, натренированную с нуля.
-
You must be registered for see links
- ️
You must be registered for see links
- ️️
You must be registered for see links

Rock Paper Scissors (MobilenetV2)
Вы играете в камень-ножницы-бумагу с моделью. Эта модель использует трансферное обучение, основанное на сети
You must be registered for see links
.-
You must be registered for see links
- ️
You must be registered for see links
- ️️
You must be registered for see links

Распознавание объектов (MobileNetV2)
Вы показываете модели ваше окружение (используя камеру ноутбука или телефона), а модель пытается определить предметы на видео и распознать их. Эта модель использует сеть
You must be registered for see links
.-
You must be registered for see links
- ️
You must be registered for see links
- ️️
You must be registered for see links

Классификация изображений (MobileNetV2)
Вы загружаете изображение, а модель пытается его классифицировать в зависимости от того, что она "видит" на картинке. Модель использует сеть
You must be registered for see links
.-
You must be registered for see links
- ️
You must be registered for see links
- ️️
You must be registered for see links

Эксперименты с рекуррентными нейронными сетями (Recurrent Neural Networks, RNN)
Суммирование чисел
Вы набираете выражение (например, 17+38) и модель предсказывает результат (например 55). Интересность этой модели заключается в том, что она воспринимает выражение на входе, как последовательность символов (как текст). Модель учится "переводить" последовательность 1 → 17 → 17+ → 17+3 → 17+38 на входе в другую текстовую последовательность 55 на выходе. Считайте, что модель скорее делает перевод испанского Hola в английское Hello, чем оперирует математическими сущностями.
-
You must be registered for see links
- ️
You must be registered for see links
- ️️
You must be registered for see links

Генерация текста в стиле Шекспира
Вы начинаете поэму как Шекспир, а модель пытается ее продолжить как Шекспир. Ключевое слово "пытается" .
-
You must be registered for see links
- ️
You must be registered for see links
- ️️
You must be registered for see links

Генерация текста в стиле Wikipedia
Вы начинаете печатать Wiki статью, а модель продолжает.
-
You must be registered for see links
- ️
You must be registered for see links
- ️️
You must be registered for see links

Планы
Как я упомянул выше, главная задача
You must be registered for see links
— быть тренировочной площадкой, песочницей для обучения машинному обучению (привет, каламбур ). Поэтому в планах — продолжать учиться и экспериментировать с различными задачами в области Deep Learning. Такими интересным задачами могут быть:- Определение эмоций
- Перенос стиля
- Машинный перевод
- Генерация изображения (например тех-же написанных цифр)
- и пр.
Другой интересной возможностью является более тонкая настройка уже имеющихся моделей, чтобы сделать их более точными. Мне кажется это может дать более глубокое понимание того, как преодолевать переученность/недоученность моделей и как поступать в случаях, когда точность модели застревает на 60% для тренировочных и валидационных данных и не хочет больше улучшаться.
В любом случае, я надеюсь, что вы найдете что-то полезное и интересное в
You must be registered for see links
в контексте обучения машинных моделей, ну или по крайней мере обыграете компьютер в камень-ножницы-бумагу.Успешного обучения!