Это руководство посвящено глубокому обучению и важным алгоритмам в Keras. Разберем сферы применение алгоритма и его реализацию в Keras.
Глубокое обучение — это подраздел машинного обучения, использующий алгоритмы, вдохновленные работой человеческого мозга. В последнем десятилетии было несколько важных разработок в этой области. Библиотека Keras – результат одной из них. Она позволяет создавать модели нейронных сетей в несколько строк кода.
В свое время был бум в исследовании алгоритмов глубокого обучения, а Keras обеспечивает простоту их создания для пользователей.
Но прежде чем переходить к глубокому обучению, осуществим установку Keras.
Популярные алгоритмы глубокого обучения с Keras
Вот самые популярные алгоритмы глубокого обучения:
- Автокодировщики
- Сверточные нейронные сети
- Рекурентные нейронные сети
- Долгая краткосрочная память
- Глубокая машина Больцмана
- Глубокие сети доверия
В этом материале рассмотрим автокодировщики глубокого обучения
Автокодировщики
Эти типы нейронных сетей способны сжимать входящие данные и воссоздавать их заново. Это очень старые алгоритмы глубокого обучения. Они кодируют ввод в до уровня узкого места («бутылочного горлышка»), а затем декодируют для получения исходных данных. Таким образом на уровне «бутылочного горлышка» образуется сжатая форма ввода.
Определение аномалий и устранение шумов на изображении — основные сферы применения автокодировщиков.
Типы автокодировщиков
Есть 7 типов автокодировщиков глубокого обучения:
- Шумоподавляющие автокодировщики
- Глубокие автокодировщики
- Разреженные автокодировщики
- Сжимающие автокодировщики
- Сверточные автокодировщики
- Вариационные автокодировщики
- Неполные автокодировщики
Для примера будет создан шумоподавляющий автокодировщик
Реализации шумоподавляющего автокодировщика в Keras
В целях реализации на Keras будем работать с базой данных цифр MNIST.
Для начала добавим на изображения шумы. Затем создадим автокодировщик для удаления шума и воссоздания оригинальных изображений.
- Импортируем требуемые модули
import numpy as np import matplotlib.pyplot as plt from keras.datasets import mnist from keras.layers import Input,Dense,Conv2D,MaxPooling2D,UpSampling2D from keras.models import Model from keras import backend as K
- Загружаем изображения MNIST из модуля datasetes
from keras.datasets import mnist (x_train,y_train),(x_test,y_test)=mnist.load_data()
- Конвертируем набор в диапазон от 0 до 1
x_train=x_train.astype('float32')/255 x_test=x_test.astype('float32')/255 x_train=np.reshape(x_train,(len(x_train),28,28,1)) x_test=np.reshape(x_test,(len(x_test),28,28,1))
- Добавляем шум на изображения с помощью Гауссового распределения
noise_factor=0.5 x_train_noisy=x_train + noise_factor * np.random.normal(loc=0.0, scale=1.0,size=x_train.shape) x_test_noisy=x_test + noise_factor * np.random.normal(loc=0.0, scale=1.0,size=x_test.shape) x_train_noisy= np.clip(x_train_noisy,0.,1.) x_test_noisy= np.clip(x_test_noisy,0.,1.)
- Визуализируем добавленный шум
n=5 plt.figure(figsize=(20,2)) for i in range(n): ax=plt.subplot(1,n,i+1) plt.imshow(x_test_noisy[i].reshape(28,28)) plt.gray() ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) plt.show()
- Определяем входящий слой и создаем модель
input_img=Input(shape=(28,28,1)) x=Conv2D(128,(7,7),activation='relu',padding='same')(input_img) x=MaxPooling2D((2,2),padding='same')(x) x = Conv2D(32, (2, 2), activation='relu', padding='same')(x) x = MaxPooling2D((2, 2), padding='same')(x) encoded = Conv2D(1, (7, 7), activation='relu', padding='same')(x)
- «Бутылочное горлышко» закодировано и состоит из сжатых изображений
input_encoded = Input(shape=(7, 7, 1)) x = Conv2D(32, (7, 7), activation='relu', padding='same')(input_encoded) x = UpSampling2D((2, 2))(x) x = Conv2D(128, (2, 2), activation='relu', padding='same')(x) x = UpSampling2D((2, 2))(x) decoded = Conv2D(1, (7, 7), activation='sigmoid', padding='same')(x)
- Тренируем автокодировщик
encoder = Model(input_img, encoded, name="encoder") decoder = Model(input_encoded, decoded, name="decoder") autoencoder = Model(input_img, decoder(encoder(input_img)), name="autoencoder") autoencoder.compile(optimizer='adam', loss='binary_crossentropy') autoencoder.summary() autoencoder.fit(x_train, x_train, epochs=20, batch_size=256, shuffle=True, validation_data=(x_test, x_test))
В этом примере модель тренировалась в течение 20
epoch
. Лучшего результата можно добиться, увеличив это значение до 100. - Получаем предсказания по шумным данным
x_test_result = autoencoder.predict(x_test_noisy, batch_size=128)
- Заново визуализируем воссозданные изображения
n=5
plt.figure(figsize=(20,2))
for i in range(n):
ax=plt.subplot(1,n,i+1)
plt.imshow(x_test_result[i].reshape(28,28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
plt.show()
Как видите, автокодировщик способен воссоздать изображения и избавиться от шумов. Можно добиться лучших результатов, увеличив количество epoch
.
Вывод
Этот материал представляет собой пример реализации глубокого обучения на Keras. Теперь вы знаете, что такое автокодировщики, какими они бывают, зачем они нужны, и как именно работают. В примере мы разобрали построение нейронной сети для устранения шума из данных.