Мой четырехлетний племянник Яли очень заинтересовался покемонами.
У него есть тонна этих игрушек и несколько карточек коллекционной карточной игры (TGG).
Вчера он обнаружил, что у меня большая коллекция карточек ТГГ, а теперь карточек у него так много, что он просто не может с ними справиться.
Проблема в том, что Яли слишком молод, чтобы понимать, как играют в игру, поэтому он придумал свою собственную версию игры.
Цель игры — рассортировать карты по категориям (Покемоны, Энергия и Тренировочная карта).
Он не спросил, откуда я узнал, что это за карта.
Он просто взял несколько карточек и спросил, какого они типа.
Получив несколько ответов, ему удалось разделить несколько карточек по типам (допустив при этом несколько ошибок).
В этот момент я понял, что мой племянник — это, по сути, алгоритм машинного обучения, и моя работа как дяди — размечать для него данные.
Поскольку я компьютерный компьютерщик и энтузиаст машинного обучения, я начал писать программу, способную конкурировать с Yali.
Вот как выглядит типичная карта покемона:
Взрослому, умеющему читать, легко понять, что это за карточка – на ней написано.
Но Яли 4 года, и она не умеет читать.
Простой модуль оптического распознавания символов быстро решил бы мою проблему, но я не хотел делать ненужных предположений.
Я просто взял эту карту и предоставил ее для изучения нейросети MLP. Спасибо сайту pkmncards Я мог загружать картинки уже рассортированные по категориям, поэтому проблем с данными не возникло.
Алгоритму машинного обучения нужны функции, и моими функциями были пиксели изображения.
Я конвертировал 3 цвета RGB в одно целое число.
Так как мне попадались картинки разного размера, их нужно было нормализовать.
Найдя максимальную высоту и ширину картинок, я добавил нули к меньшим картинкам.
Быстрый контроль качества перед запуском самой программы.
Я случайным образом вытягивал по две карты каждого типа и делал прогноз.
При использовании по 100 карточек из каждой категории подгонка шла очень быстро, а прогнозы были ужасными.
Затем я взял по 500 карточек из каждой категории (исключая типы энергии, которых было всего 130) и провел подгонку.
Память закончилась.
Можно было запустить код подгонки в облаке, но хотелось придумать способ экономии памяти.
Самое большое изображение было 800x635, оно было слишком большим, и изменение размера изображения решило мою проблему.
Чтобы реально протестировать, помимо обычных карточек я добавил карточки, на которых немного нацарапал, карточки, разрезанные пополам с нарисованными сверху контурами, сфотографированные на телефон (с плохой камерой) и т. д. Эти карточки не использовались.
для тренировки.
Я использовал 1533 модели.
Различные размеры изображения, несколько скрытых слоев (до 3), длина слоя (до 100), цвета изображения, способы чтения изображения (все изображение, верхняя часть, каждый второй пиксель и т. д.).
После многих часов настройки лучшим результатом стали 2 ошибки из 25 карт (такой результат был у немногих моделей, и каждая из них допускала ошибки на разных картах).
9 моделей из 1533 сработали с результатом 2 ошибки.
Комбинация моделей давала мне результат с 1 ошибкой, если я поднимал порог выше 44%.
Для теста я использовал порог 50%.
Я подождал месяц, пока Яли поигрался с картами и протестировал.
Возникают ошибки при распознавании энергетических карт. На pkmncards было всего 130 таких карт, в отличие от тысяч других типов карт. Меньше примеров для изучения.
Я спросил Яли, как он узнал карты, и он сказал, что видел некоторых покемонов в сериалах или книгах.
Так он узнал уши Райчу или узнал, что Вапореон был водным Иви.
В моей программе таких данных не было, только карты.
Победив Яли в игре в покемонов и получив награду, наш машинный интеллект отправляется навстречу новым приключениям.
Теги: #Машинное обучение #Игры и игровые приставки #искусственный интеллект #Pokemon
-
Hyper-V И Сети
19 Oct, 24 -
Реанимация Старого Дедушки 386
19 Oct, 24 -
Битва Sec Против Telegram
19 Oct, 24