Джейдип Дас, студент факультета компьютерных наук и инженерии MAKAUT

Вы можете получить этот блокнот проекта: https://jovian.ai/jaydeep-msd/rock-paper-scissors-cnn

Jovian: Jovian — это бесплатная платформа, на которой вы можете легко хранить/сохранять свой проект по науке о данных, а также они предлагают множество бесплатных курсов. так что просто посетите jovian.ai

Об игре "Камень-ножницы-бумага":

Камень-ножницы-бумага (также известный под другим порядком трех предметов, где «камень» иногда называют «камнем») — это ручная игра, в которую обычно играют два человека, в которой каждый игрок одновременно формирует одну из трех фигур вытянутой рукой. . Это «камень» (сжатый кулак), «бумага» (плоская рука) и «ножницы» (кулак с вытянутыми указательным и средним пальцами, образующими букву V). «Ножницы» идентичны двупалому знаку V (также обозначающему «победу» или «мир»), за исключением того, что они направлены горизонтально, а не вертикально в воздухе.

Одновременная игра с нулевой суммой имеет только два возможных исхода: ничья или выигрыш одного игрока и проигрыш другого. Игрок, решивший сыграть в камень, обыграет другого игрока, выбравшего ножницы («камень давит ножницы» или иногда «тупит ножницы»), но проиграет тому, кто играл в бумагу («бумага покрывает камень»); игра с бумагой проиграет игре с ножницами («ножницы режут бумагу»). Если оба игрока выбирают одинаковую форму, игра считается равной и обычно сразу же переигрывается, чтобы разрешить ничью. Этот тип игры зародился в Китае и распространился по мере расширения контактов с Восточной Азией, при этом со временем развивались различные варианты знаков.

Установка:

Сначала мы устанавливаем tensorflow и наборы данных tensorflow.

Импорт необходимых библиотек:

После установки необходимой библиотеки. Теперь нам нужно импортировать такие библиотеки, как matplotlib, numpy, tensorflow, tensorflow_datasets, keras

Найти наборы данных:

В tensorflow_datasets присутствует более 100 наборов данных. мы должны выбрать или найти набор данных из тензорного потока.

или вы можете легко загрузить набор данных с другого веб-сайта, например
https://www.kaggle.com/datasets,
https://datasetsearch.research.google.com/
и многое другое…

Вы также можете просмотреть tensorflow_datasets вручную, посетив следующий веб-сайт:
https://www.tensorflow.org/datasets/overview
https://www.tensorflow.org/datasets/catalog/ обзор

Получить информацию о данных

Наконец, я выбираю rock_paper_scissors наборов данных. Поэтому я просто вызываю этот набор данных с помощью функции builder()

Подготовка данных "камень, ножницы, бумага"

Показать примеры

Показаны некоторые изображения из этого набора данных rock_paper_scissors. Здесь мы видим, что rock представлено 0, paper представлено 1 и scissors представлено 2.

Подготовка дополнительных данных

мы конвертируем данные поезда набора данных в многомерный массив

здесь мы видим, что у нас получается массив 4-х мерный. (2520,300,300,3) означают, что он имеет 2520 строк, 300 x 300 пикселей, 3 цветовых каналов (т.е. RBG - красный, синий, зеленый)

теперь мы конвертируем тестовые данные набора данных в многомерный массив

здесь мы видим, что у нас получается массив 4-х мерный. (372,300,300,3) означают, что он имеет 372 строк, 300 x 300 пикселей, 3 цветовых канала (т. е. RBG — красный, синий, зеленый)

теперь нам не нужен 3 цветовой канал. поэтому мы просто извлекаем/удаляем этот цветовой канал. просто преобразовать в чистое черно-белое

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

Теперь мы преобразуем эту чистую комбинацию черного и белого в оттенки серого. и также измените тип данных с uint8 на float32 (т.е. int -> float)

Обучение сети (базовый подход)

теперь мы обучаем наш набор данных базовому подходу

наконец, мы видим, что точность поезда составляет 87,72%, но точность нашего теста составляет 55,91%. Это худшее.

Обучение сети (сверточный подход)

теперь мы обучаем наш набор данных сверточному подходу.

Дискриминатор принимает изображение в качестве входных данных и пытается классифицировать его как «реальное» или «сгенерированное». В этом смысле она похожа на любую другую нейронную сеть. Мы будем использовать сверточные нейронные сети (CNN), которые выводят одно число для каждого изображения. Мы будем использовать шаг 2, чтобы постепенно уменьшать размер выходной карты объектов.

снова мы видим, что точность поезда составляет 100%, но точность нашего теста составляет 55,91%. Нам нужно найти лучший способ повысить точность тестирования.

Улучшенная сверточная сеть

Небольшое улучшение!!!

Настройка гиперпараметров

теперь мы обучаем наш набор данных настройке гиперпараметров

для получения дополнительной информации о настройке гиперпараметров: https://www.jeremyjordan.me/hyperparameter-tuning/

сначала мы устанавливаем keras-tuner, если вы хотите узнать о keras-тюнере: https://www.tensorflow.org/tutorials/keras/keras_tuner

теперь мы даем некоторый набор условий. он автоматически проверяет все условия (например, сверточный слой, фильтр слоя, плотный слой)

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

просто мы обобщили нашу best_model и некоторые другие модели

Построить изображение из массива Numpy

здесь мы видим, что наше изображение test_dataset как в оттенках серого, так и в RBG

Использование модели для прогнозирования результата для одного примера

согласно нашей_лучшей_модели, выше test_image указано как rock = 0,299814%, paper = 1,112196% и scissor = 98,857996%. поэтому он предсказывает scissor (т. е. 2), что совершенно правильно.