Глубокое обучение в Keras / keras 4

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

Глубокое обучение — это подраздел машинного обучения, использующий алгоритмы, вдохновленные работой человеческого мозга. В последнем десятилетии было несколько важных разработок в этой области. Библиотека Keras – результат одной из них. Она позволяет создавать модели нейронных сетей в несколько строк кода.

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

Но прежде чем переходить к глубокому обучению, осуществим установку Keras.

Популярные алгоритмы глубокого обучения с Keras

Вот самые популярные алгоритмы глубокого обучения:

  • Автокодировщики
  • Сверточные нейронные сети
  • Рекурентные нейронные сети
  • Долгая краткосрочная память
  • Глубокая машина Больцмана
  • Глубокие сети доверия

В этом материале рассмотрим автокодировщики глубокого обучения

Автокодировщики

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

Определение аномалий и устранение шумов на изображении — основные сферы применения автокодировщиков.

Типы автокодировщиков

Есть 7 типов автокодировщиков глубокого обучения:

  • Шумоподавляющие автокодировщики
  • Глубокие автокодировщики
  • Разреженные автокодировщики
  • Сжимающие автокодировщики
  • Сверточные автокодировщики
  • Вариационные автокодировщики
  • Неполные автокодировщики

Для примера будет создан шумоподавляющий автокодировщик

Реализации шумоподавляющего автокодировщика в Keras

В целях реализации на Keras будем работать с базой данных цифр MNIST.

Для начала добавим на изображения шумы. Затем создадим автокодировщик для удаления шума и воссоздания оригинальных изображений.

  1. Импортируем требуемые модули
    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
    
  2. Загружаем изображения MNIST из модуля datasetes
    from keras.datasets import mnist
    (x_train,y_train),(x_test,y_test)=mnist.load_data()
    
  3. Конвертируем набор в диапазон от 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))
    
  4. Добавляем шум на изображения с помощью Гауссового распределения
    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.)
    
  5. Визуализируем добавленный шум
    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()
    
  6. Определяем входящий слой и создаем модель
    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)
    
  7. «Бутылочное горлышко» закодировано и состоит из сжатых изображений
    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)
    
  8. Тренируем автокодировщик
    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.

  9. Получаем предсказания по шумным данным
    x_test_result = autoencoder.predict(x_test_noisy, batch_size=128)
    
  10. Заново визуализируем воссозданные изображения
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. Теперь вы знаете, что такое автокодировщики, какими они бывают, зачем они нужны, и как именно работают. В примере мы разобрали построение нейронной сети для устранения шума из данных.

Максим
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ.
Мои контакты: Почта
admin@pythonru.comAlex Zabrodin2018-10-26OnlinePython, Programming, HTML, CSS, JavaScript