Многослойный персептрон с использованием Keras в наборе данных MNIST для классификации цифр
Активация ReLu + Dropout + BatchNormalization + AdamOptimizer
Загрузка набора данных MNIST
Каждая точка данных MNIST состоит из двух частей: изображения рукописной цифры и соответствующей метки. Назовем изображения «x», а метки «y». И обучающий набор, и тестовый набор содержат изображения и соответствующие им метки; например, тренировочные изображения — это mnist.train.images, а обучающие метки — mnist.train.labels.
# the data, shuffled and split between a train and test sets (X_train, y_train), (X_test, y_test) = mnist.load_data()
если вы Keras не используете TensorFlow в качестве бэкэнда, установите «KERAS_BACKEND=tensorflow», используйте эту команду
Импорт библиотек
Функция графика
# https://gist.github.com/greydanus/f6eee59eaf1d90fcb3b534a25362cea4
# https://stackoverflow.com/a/14434334
# эта функция используется для обновления графиков для каждой эпохи и ошибка
Изменение размера ввода:
Если вы наблюдаете входную форму, это двумерный вектор. Для каждого изображения у нас есть вектор (28*28). Мы преобразуем вектор (28*28) в одномерный вектор 1 * 784.
После преобразования входных изображений из 3d в 2d векторы.
Пример значения пикселя точки данных, близкого к 255, соответствует черному цвету, а близкому к 0 — белому. В середине серый. печать (X_train [0])
Нормализация:
Если мы посмотрим на приведенную выше матрицу, каждая ячейка имеет значение от 0 до 255. прежде чем мы перейдем к применению алгоритмов машинного обучения, давайте попробуем нормализовать данные. X =› (X — Xmin)/(Xmax-Xmin) = X/255
Маркировка:
Преобразуем это в 10-мерный вектор. пример: рассмотрим изображение 5, преобразуем его в 5 => [0, 0, 0, 0, 0, 1, 0, 0, 0, 0]. это преобразование необходимо для MLP.
Пошаговое построение классификатора Softmax
# https://keras.io/getting-started/sequential-model-guide/
Последовательная модель представляет собой линейный набор слоев. вы можете создать модель Sequential, передав конструктору список экземпляров слоя:
model = Sequential([Dense(32, input_shape=(784,)), Activation(‘relu’),Dense(10),Activation(‘softmax’)]) # You can also simply add layers via the .add() method: model = Sequential() model.add(Dense(32, input_dim=784)) model.add(Activation(‘relu’))
# https://keras.io/layers/core/ #параметр, отображаемый в слое Keras
keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer=’glorot_uniform’, bias_initializer=’zeros’, kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
Dense реализует операцию: вывод = активация(точка(ввод, ядро)+смещение), где активация — это поэлементная функция активации, переданная в качестве аргумента активации, ядро — это матрица весов, созданная слоем, а #bias — это вектор смещения, созданный слоем (применимо, только если use_bias имеет значение True)
выход = активация (точка (ввод, ядро) + смещение) => y = активация (WT. X + b)
Активация:
Активации можно использовать либо через уровень активации, либо через аргумент активации, поддерживаемый всеми прямыми уровнями.
# from keras.layers import Activation, Dense # model.add(Dense(64)) # model.add(Activation(‘tanh’)) # This is equivalent to: # model.add(Dense(64, activation=’tanh’))
Доступно множество функций активации, например: tanh, relu, softmax.
Модель здания:
Шаг 1:
Модель должна знать, какую входную форму она должна ожидать. По этой причине это первый слой в модели Sequential (и только первый, потому что следующие слои могут делать автоматический вывод формы). он должен получить информацию о своей входной форме. вы можете использовать input_shape и input_dim для передачи формы ввода. output_dim представляет количество узлов, необходимых на этом уровне, здесь у нас есть 10 узлов.
Шаг 2:
Перед обучением модели необходимо настроить процесс обучения, который выполняется с помощью метода компиляции. Он получает три аргумента:
1 — Оптимизатор. Это может быть строковый идентификатор существующего оптимизатора, https://keras.io/optimizers/
2 — Функция потерь. Это цель, которую модель попытается минимизировать., https://keras.io/losses/
3 — Список метрик. Для любой проблемы с классификацией вам нужно установить значение metrics=[‘accuracy’]. https://keras.io/metrics/
Примечание. при использовании потери categorical_crossentropy ваши цели должны быть в категориальном формате (например, если у вас есть 10 классов, целью для каждой выборки должен быть 10-мерный вектор то есть все нули, кроме 1 в индексе, соответствующем классу образца). поэтому мы преобразовали метки в векторы.
Шаг 3. Модели Keras обучаются на массивах входных данных и меток Numpy.
Для обучения модели обычно используется функция подгонки.
fit(self, x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None)
Функция fit() Обучает модель для фиксированного количества эпох (итераций в наборе данных).
Он возвращает объект истории. Это История. Атрибут истории — это запись значений потерь при обучении и значений показателей в последовательных эпохах, а также значений потерь при проверке и значений показателей проверки (если применимо). https://github.com/openai/baselines/issues/20
Оценивать:
print(history.history.keys()) dict_keys([‘val_loss’, ‘val_acc’, ‘loss’, ‘acc’]) history = model_drop.fit(X_train, Y_train, batch_size=batch_size, epochs=nb_epoch, verbose=1, validation_data=(X_test, Y_test))
Мы получим val_loss и val_acc только при передаче параметра validation_data.
- val_loss : потеря проверки
- val_acc : точность проверки
- потеря : потеря тренировки
- acc : точность поезда
Сборка MLP + активация ReLu + Dropout + BatchNormalization + AdamOptimizer
Величина кросс-энтропийной потери поезда и тестового набора резко уменьшается в первые 2 эпохи, а затем становится постоянной.
Нанесение весов
Медианный вес layer_1 равен нулю с меньшей вариацией среди узлов, тогда как вариация layer_2 высока среди узлов. в выходном слое значение веса имеет отрицательное значение с меньшим разбросом.
================код=================
======================================
Ссылки:
- вики
- применил ИИ
- keras.io