Я покажу, как я обучил набор данных TMNIST Alphabet (94 символа) с помощью Cnn и как я использовал настройку гиперпараметров с разверткой Wandb.

Я использовал набор данных Typography MNIST (TMNIST) с 94 символами и более 281 000 изображений. В этом наборе данных было несколько пустых изображений, и мы очистили набор данных, в конце в нем осталось 274 093 изображения.

Я написал свой код в Google Colab, который прост и удобен в использовании. Сначала я загрузил CSV-файл на Google Диск, а затем прочитал данные с Диска в виде фрейма данных. Я не буду показывать, как я разделил все данные X и Y на обучение и тестирование. В конце страницы вы можете найти ссылку для доступа к моему Colab.

Сначала установите wandb и войдите в систему, и нам нужно использовать WandbCallback() для вызова функции model.fit(). Чтобы войти в систему, вам необходимо создать учетную запись.

На этом шаге вы должны настроить конфигурацию развертки. Метод может быть «случайным», «сеточным» или «байесовским». Я буду использовать рандом и сетку.

Затем начните развертку;

Эта функция обучения ниже будет вызываться для каждого отдельного гиперпараметра.

Теперь вы можете начать настройку гиперпараметров с помощью развертки Wandb. Лучше всего использовать эту платформу, так как она визуализирует все параметры, и вы можете одновременно сравнивать все прогоны со всеми деталями. Я должен сказать, что это намного лучше, чем визуализация TensorBoard.

Этот метод агента запускает развертку, он использует функцию train каждый раз, а подсчет — это максимальное количество запусков. Если вы не установите его, он будет работать до тех пор, пока не будут выполнены все возможные комбинации.

Буду экспериментировать с разными уровнями параметров.

  1. Сверточный слой
  2. Плотный слой
  3. Функции активации
  4. Оптимизатор и скорость обучения
  5. Инициализатор
  6. Функция потери

1. Параметры сверточного слоя

Слои CNN могут быть одним или несколькими слоями. В этом эксперименте мы использовали 2 слоя CNN. Мы экспериментируем с 9 комбинациями слоев: 32, 64 и 96. Параллельная координата ниже показывает, какова точность проверки и точность обучения.

2. Параметры плотного слоя

Я пробовал плотные слои размером 64, 96, 128 и 256. Более плотный слой дает лучшую точность.

3. Функции активации

Я экспериментировал с ReLu, GeLu, Sigmoid, Tanh, Selu, Elu, Leaky Relu. Очевидно, что Gelu и Relu работают лучше, чем другие функции активации. Функция Gelu (линейная единица ошибки Гаусса) работает лучше, чем другие.

4. Оптимизатор и скорость обучения

4.1 Скорость обучения

Мы экспериментируем со скоростью обучения с оптимизатором Adam в диапазоне от 0,01 до 0,0001.

Приведенные выше результаты показывают, что скорости обучения 0,001, 0,0005 и 0,0001 дают лучший результат, чем другие.

4.2 Оптимизаторы с разной скоростью обучения

Мы экспериментировали с оптимизаторами Adam, Nadam (Адам с импульсом Нестрова), RMSProp и SGD.

Оптимизатор SGD не дает хорошего результата для 10 эпох. Итак, мы в основном сосредоточились на Адаме, Надаме и Рмспропе. SGD не смог превзойти точность 0,60.

Теперь я поделюсь оптимизаторами со скоростью обучения = 0,0005. Очевидно, что Рмспроп не мог обойти Адама и Надама. Оптимизатор Надам немного лучше Адама.

Теперь я хочу поделиться оптимизатором Nadam с разными диапазонами.

5. Инициализатор

Будем экспериментировать с инициализаторами He, Xavier/Glorot, Random. Эта страница дает некоторое представление об инициализации. Кроме того, вы можете проверить эту страницу, чтобы увидеть, как можно разумно выбрать инициализацию.

  • Глорот (Ксавьер) Инициализация:

— Равномерное распределение

- Нормальное распределение

— Равномерное распределение

- Нормальное распределение

  • Случайная инициализация: инициализирует веса случайным образом.

— Равномерное распределение

- Нормальное распределение

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

В нашем эксперименте He(uniform) и He(normal) превосходят инициализатор Glorot. Случайный инициализатор работает хуже, чем другие. Нулевой инициализатор никак не влияет на эти данные, поэтому я не буду делиться его результатами.

5. Функция потерь

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

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

1714/1714 [==============================] - 21s 12ms/step - loss: 0.0048 - categorical_accuracy: 0.9399
Test results - Val Loss: 0.004786785691976547%
Test results - Val Accuracy: 0.9399113655090332%

После запуска с лучшими параметрами в Keras-Tuner категориальная точность проверки составляет 94,26%. Я тестирую лучшую модель с тестовыми данными (20% всех данных), а точность теста составляет 93,99%.

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