Глубокое обучение с Keras: обучение нейронной сети с помощью Keras [с кодом]
Опубликовано: 2020-12-24Keras — это библиотека Python, которая предоставляет API для работы с нейронными сетями и платформами глубокого обучения. Keras предоставляет функции и модули, которые очень удобны при работе с различными приложениями глубокого обучения на Python.
К концу этого урока вы будете знать следующее:
- Что такое Керас?
- Керас API
- Обучение нейронной сети в Keras
Оглавление
Что такое Керас?
Для глубокого обучения наиболее часто используемой библиотекой ранее была Tensorflow 1.x, с которой было сложно работать новичкам. Потребовалось много кода, чтобы просто создать базовую одноуровневую сеть. Однако с Keras весь процесс создания структуры нейронной сети, а затем ее обучения и отслеживания стал чрезвычайно простым.
Keras — это высокоуровневый API, который может работать на бэкэнде Tensorflow, Theano и CNTK. Это дает нам возможность проводить эксперименты с использованием нейронных сетей, используя высокоуровневый и удобный API. Он также может работать на процессорах и графических процессорах.
Керас API
Keras имеет 10 различных модулей API, предназначенных для моделирования и обучения нейронных сетей. Давайте рассмотрим каждый из них, чтобы понять, что может предложить Keras.
Модели
API моделей предоставляет функциональные возможности для создания сложных нейронных сетей путем добавления/удаления слоев. Модель может быть Sequential, что означает, что слои будут складываться последовательно с одним вводом и выводом. Модель также может быть функциональной, то есть с полностью настраиваемыми моделями. Это то, что используется в основном в промышленности.

В API также есть учебный модуль, который предоставляет методы для компиляции модели вместе с оптимизатором и функцией потерь, метод подбора модели, метод оценки и прогнозирования новых данных. Кроме того, он также имеет методы обучения, тестирования и прогнозирования на пакетных данных. Models API также поддерживает сохранение и сериализацию моделей.
Слои
Слои — это строительные блоки любой нейронной сети. Layers API предлагает полный набор методов для построения архитектуры нейронной сети. В Layers API есть класс Base Layer, который содержит методы, необходимые для создания пользовательских слоев с пользовательскими весами и инициализаторами.
Он содержит класс Layer Activations, который состоит из различных функций активации, таких как ReLU, Sigmoid, Tanh, Softmax и т. д. Класс Layer Weight Initializers предлагает методы для инициализации весов различными способами.
Он также состоит из класса Core Layers, который состоит из классов, необходимых для добавления основных слоев, таких как Dense layer, Activation Layer, Embedding layer и т. д. Класс Convolution Layer предлагает различные методы для добавления различных типов слоев свертки. Класс Pooling Layers содержит методы, необходимые для различных типов объединения, таких как максимальное объединение, среднее объединение, глобальное максимальное объединение и глобальное среднее объединение.
Обратные вызовы
Обратные вызовы — это способ отслеживать процесс обучения модели. При включенном обратном вызове различные действия могут выполняться до или после окончания эпохи или пакета. С помощью обратных вызовов вы можете:
- Отслеживайте показатели обучения, регистрируя показатели в TensorFlow Board.
- Периодическое сохранение модели на диск
- Ранняя остановка в случае, если потери значительно не уменьшаются после определенных эпох
- Просмотр внутренних состояний и статистики модели во время обучения
Предварительная обработка набора данных
Данные обычно находятся в необработанном формате и лежат в упорядоченных каталогах, и их необходимо предварительно обработать перед подачей в модель для подбора. Класс Image Data Preprocessing имеет множество таких специализированных функций. Например, данные изображения должны быть в числовом массиве, для которого мы можем использовать функцию img_to_array. Или, если изображения присутствуют внутри каталога и подпапок, мы можем использовать функцию image_dataset_from_directory.
API предварительной обработки данных также имеет классы для данных временных рядов и текстовых данных.
Оптимизаторы
Оптимизаторы являются основой любой нейронной сети. Каждая нейронная сеть работает над оптимизацией функции потерь, чтобы найти наилучшие веса для предсказания. Существует несколько типов оптимизаторов, которые используют немного разные методы для нахождения оптимальных весов. Все эти оптимизаторы доступны в API оптимизаторов — SGD, RMSProp, Adam, Adadelta, Adagrad, Adamax, Nadal, FTRL.
Убытки
Функции потерь необходимо задавать при составлении модели. Эта функция потерь будет оптимизирована оптимизатором, который также будет передан в качестве параметра в методе компиляции. Три основных класса потерь: вероятностные потери, регрессионные потери, шарнирные потери.
Метрики
Метрики используются в каждой модели машинного обучения для количественной оценки ее производительности на тестовых данных. Метрики аналогичны функциям потерь, за исключением того, что они используются на тестовых данных. Доступно множество показателей точности, таких как точность, двоичная точность, категориальная точность и т. д. Он также содержит вероятностные метрики, такие как двоичная перекрестная энтропия, категориальная перекрестная энтропия и т. д. Существуют также показатели для проверки ложных срабатываний/отрицательных результатов, такие как AUC, Точность, отзыв и т. д.
Помимо этих показателей классификации, он также имеет показатели регрессии, такие как среднеквадратическая ошибка, среднеквадратическая ошибка, средняя абсолютная ошибка и т. д.
Читайте также: Что к чему от Keras и TensorFlow

Керас Приложения
Класс Keras Applications состоит из нескольких готовых моделей вместе с предварительно обученными весами. Эти предварительно обученные модели используются в процессе трансферного обучения. Эти предварительно обученные модели различаются в зависимости от архитектуры, количества слоев, обучаемых весов и т. д. Некоторые из них — Xception, VGG16, Resnet50, MobileNet и т. д.
Обучение нейронной сети с помощью Keras
Давайте рассмотрим простой набор данных, такой как MNIST, который доступен в классе наборов данных Keras. Мы создадим простую последовательную сверточную нейронную сеть для классификации рукописных изображений цифр 0-9.
#Загружаем набор данных из keras.datasets импортировать mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() |
Нормализация набора данных путем деления каждого пикселя на 255. Кроме того, необходимо преобразовать изображения в 4 измерения, прежде чем подавать их в модель CNN.
x_train = x_train.astype( 'float32' ) x_test = x_test.astype( 'float32' ) х_поезд /= 255 х_тест /= 255 x_train = X_train.reshape(X_train.shape[ 0 ], 28 , 28 , 1 ) x_test = X_test.reshape(X_test.shape[ 0 ], 28 , 28 , 1 ) |
Нам нужно пометить классы encode перед тем, как передать их модели. Мы сделаем это, используя класс Keras Utils.
из keras.utils импортировать в_categorical
|
Теперь мы можем приступить к созданию модели с помощью Sequential API.
из keras.models импорт последовательный из keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout model = Sequential() model.add(Conv2D(filters= 32 , kernel_size=( 5 , 5 ), активация= 'relu' , input_shape=x_train.shape[ 1 :])) model.add(MaxPool2D(pool_size=( 2 , 2 ))) model.add (Отсев (скорость = 0,25 )) model.add (Conv2D (фильтры = 64 , kernel_size = ( 3 , 3 ), активация = 'relu' )) model.add(MaxPool2D(pool_size=( 2 , 2 ))) model.add (Отсев (скорость = 0,25 )) model.add(Свести()) model.add (плотный ( 256 , активация = 'relu' )) model.add (Отсев (скорость = 0,5 )) model.add(плотный( 10 , активация= 'softmax' )) |
В приведенном выше коде мы объявляем последовательную модель, а затем добавляем к ней несколько слоев. Сверточный слой, за которым следует слой Max Pooling, а затем слой исключения для регуляризации. Позже мы сглаживаем выходные данные, используя плоский слой, а последний слой представляет собой полносвязный плотный слой с 10 узлами.
Далее нам нужно скомпилировать его, передав функцию потерь, оптимизатор и метрику.
модель.компилировать( потеря = 'categorical_crossentropy' , оптимизатор = 'адам' , метрика=[ 'точность' ] ) |
Теперь нам нужно добавить дополненные изображения из исходных изображений, чтобы увеличить обучающий набор и точность модели. Мы сделаем это с помощью функции ImageDataGenerator.
из keras.preprocessing.image импортировать ImageDataGenerator генератор данных = ImageDataGenerator( диапазон_вращения = 10 , масштаб_диапазон = 0,1 , ширина_сдвига_диапазон = 0,1 , height_shift_range = 0,1 ) |
Теперь, когда модель скомпилирована, а изображения дополнены, мы можем начать процесс обучения. Поскольку мы использовали генератор данных изображения выше, мы будем использовать метод fit_generator, а не просто подгонку.

эпохи = 3 размер партии = 32 history = model.fit_generator( datagen.flow(x_train, y_train, batch_size=batch_size), epochs=epochs, validation_data=(x_test, y_test), steps_per_epoch=x_train.shape[ 0 ]//batch_size ) |
Результат тренировочного процесса следующий:
3Теперь модель обучена и может быть оценена путем запуска ее на невидимых тестовых данных.
Связанное чтение: Глубокое обучение и нейронные сети с Keras
Прежде чем ты уйдешь
В этом уроке мы увидели, насколько хорошо структурирован Keras и упрощает создание сложной нейронной сети. Keras теперь обернут Tensorflow 2.x, что дает ему еще больше возможностей. Попробуйте больше таких примеров и изучите функции и возможности Keras.
Если вам интересно узнать больше о машинном обучении, ознакомьтесь с дипломом PG IIIT-B и upGrad в области машинного обучения и искусственного интеллекта, который предназначен для работающих профессионалов и предлагает более 450 часов тщательного обучения, более 30 тематических исследований и заданий, IIIT- Статус B Alumni, более 5 практических практических проектов и помощь в трудоустройстве в ведущих фирмах.