Применение Keras-Tuner для поиска лучшей структуры CNN

Сверточная нейронная сеть — это контролируемый алгоритм для анализа и классификации данных изображений. Когда я начал этот проект, я знал основы и структуру CNN, но я не знал, сколько из этого я должен поставить.

Структура сверточной нейронной сети

Изображение взято из Сверточной нейронной сети для обнаружения ударов и определения характеристик сложных композитных конструкций, автор Юлиана Табиан, Hailing Фу и Захра Шариф Ходэ.

Сверточная нейронная сеть состоит из:

2D-преобразование:

2d принимает трехмерный ввод и передает его на ядро свертки,этоэто матрица, которая умножается на ввод, с помощью этого метода мы можем получить некоторые неявные функции из ввода.

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

Недостаток проявляется в момент выбора количества каналов,
так как в принципе мы не знаем количество подходящих каналов для наиболее точной модели, а запуск кода для каждого канала не оптимален и будет длиться до длинная.

Объединение (максимум):

Слой объединения уменьшит размер каждой карты объектов в 2 раза, уменьшив количество пикселей или значений в каждой карте объектов до одной четверти размера.

Операция объединения указана, а не изучена. Две общие функции, используемые в операции объединения:

  • Среднее объединение. Рассчитайте среднее значение для каждого исправления на карте объектов.
  • Максимальное объединение (или Максимальное объединение). Рассчитайте максимальное значение для каждого фрагмента карты объектов.

Наиболее часто используемым слоем объединения является слой Max, и в данном случае мы будем использовать его для Cifar.

Обычно перед переходом к сглаживанию необходимо сделать как минимум два или три последовательных шага свертки и объединения.

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

Уплощение

Это, наверное, самый простой шаг из всех.

По сути, мы собираемся свести всю карту объектов в столбец в виде изображения.

Полностью подключенный слой

Последний шаг нашей CNN состоит в том, чтобы взять выходные данные предыдущего слоя, «сгладить» их и превратить их в один вектор, который может быть выходным сигналом с вероятностью или классом.

На этом шаге мы можем выбрать две вещи:

Сколько узлов? Наш предыдущий слой организовал функции в столбце размера n, но мы можем выбрать, сколько узлов будет соединено на полном слое, а затем вернуть вектор, обычно это степени 2. но это не так. магическое число с самой точной моделью.

Сколько раз мы делаем этот шаг? Мы можем сделать столько подключений, сколько захотим, чтобы получить максимальную точность.

Так что у нас есть определенные сомнения в выборе:

  • Количество каналов для ядра свертки
  • Время, когда мы должны применять Conv и Pooling
  • Количество узлов для полносвязного слоя
  • Время, когда мы делаем полносвязный слой

Создание нашей сверточной нейронной сети

Перед созданием нашего CNN мы должны установить соответствующие пакеты.
Для этого из подсказки Anaconda выполните эту команду в командной строке или в google colab:

pip install tensorflow
______________________
pip install keras
______________________
pip install keras-tuner

Обычный CNN

Импорт пакетов

Для всего нашего кода понадобятся следующие пакеты

Нормализация данных

Перед загрузкой данных и для лучшего чтения данных мы определим функцию нормализации

Загрузка и предварительная обработка данных

Для этого проекта из keras у нас есть данные в keras.datasets.

Обычная модель CNN с Keras

Сначала мы собираемся выполнить обычную модель CNN с помощью Keras. Это будет иметь 2 свертки, обе с 32 каналами, и его соответствующие пулы, выравнивание и полностью связанный слой с 1024 узлами.

И, наконец, мы сопоставляем нашу CNN с нашими данными о поездах и сравниваем их с тестовыми данными.

И через несколько или слишком много минут, в зависимости от нашего компьютера, мы получим следующие результаты:

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

КЕРАС-ТЮНЕР МОДЕЛЬ

Сейчас мы собираемся сделать оптимальную модель по keras-tuner,
и в наш обычный код будут внесены лишь определенные изменения.

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

Модель с Keras Tuner

Здесь наш код отличается от предыдущего. Это будет

  • Количество input_units в свертке

Мы делаем так, чтобы наша CNN выбирала параметр input_channel случайным образом, между 32 и 256, с шагом 32.

  • Количество сверток и объединение

С этим параметром будет иметь коннет с 2–5 извилинами.

  • Количество узлов и подключенного слоя на полностью подключенном слое.

Итак, наконец, наша модель CNN будет

Случайный поиск

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

И наша цель, очевидно, состоит в том, чтобы получить максимальную точность

Установите и сохраните модель

Наконец мы подходим к нашей модели

И таким образом полный код

Результаты

После компиляции и запуска нашего кода мы получим следующие результаты

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

Вывод

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

использованная литература

[1] Адриан Роузброк (2018), Keras Conv2D и сверточные слои, https://www.pyimagesearch.com/2018/12/31/keras-conv2d-and-convolutional -слои/

[2]савьяхосла, CNN | Введение в слой пула, https://www.geeksforgeeks.org/cnn-introduction-to-pooling-layer/

[3]Команда SuperDataScience (2018 г.), Сверточные нейронные сети (CNN): шаг 3 — выравнивание!, https://www.superdatascience.com/blogs/convolutional-neural- сети-cnn-шаг-3-выравнивание

[4]Команда SuperDataScience (2018 г.), Сверточные нейронные сети (CNN): Шаг 4 — Полное подключение, https://www.superdatascience.com/blogs/convolutional-neural- сети-cnn-шаг-4-полное соединение

[5]Sendtex ([email protected]), Оптимизация структур нейронных сетей с помощью Keras-Tuner, https://pythonprogramming.net/keras-tuner-optimizing-neural-network-tutorial/