Перейти к основному содержанию
EDU-MMCS
Вы используете гостевой доступ (Вход)

Научно-исследовательский семинар: нейронные сети и глубокое обучение

  1. В начало
  2. Курсы
  3. Осенний семестр
  4. Магистратура
  5. НИСНейрСети
  6. Раздел 3. Глубокое обучение в NLP
  7. Практическое задание №5

Практическое задание №5

Требуемые условия завершения
Открыто с: среда, 9 сентября 2020, 00:00
Срок сдачи: среда, 16 сентября 2020, 00:00

1.     Запустите jupyter notebook и создайте тетрадку.

2.     Импортируйте следующие модули и загрузите набор данных lfw

import numpy as np

from lfw_dataset import fetch_lfw_dataset

from sklearn.model_selection import train_test_split

X, attr = fetch_lfw_dataset(use_raw=True,dimx=38,dimy=38)

X = X.astype('float32') / 256.0

img_shape = X.shape[1:]

X_train, X_test = train_test_split(X, test_size=0.1,random_state=42)

 

3.     Создайте автокодировщик, сложив несколько слоев. В частности, ваш кодер и декодер должны иметь глубину не менее 3-х слоев каждый. Вы можете использовать любую нелинейность, какую захотите, и любое количество скрытых нейронов в слоях:

def build_deep_autoencoder(img_shape,code_size=32):

    H,W,C = img_shape

    encoder = keras.models.Sequential()

    encoder.add(L.InputLayer(img_shape))

    <Your code: define encoder as per instructions above>

    decoder = keras.models.Sequential()

    decoder.add(L.InputLayer((code_size,)))

    <Your code: define encoder as per instructions above>

    return encoder,decoder

 

4.     Обучите получившиеся модели:

encoder,decoder = build_deep_autoencoder(img_shape,code_size=32)

inp = L.Input(img_shape)

code = encoder(inp)

reconstruction = decoder(code)

autoencoder = keras.models.Model(inp,reconstruction)

autoencoder.compile('adamax','mse')

 

autoencoder.fit(x=X_train,y=X_train,epochs=32,

validation_data=[X_test,X_test])

 

5.     Протестируйте модели и убедитесь в том, что:

a.      Модель сошлась. Некоторые архитектуры нуждаются в более чем 32 эпохах, чтобы сходиться. Они могут сильно колебаться, но в конечном итоге они станут достаточно хорошими. Вы можете тренировать свою сеть столько времени, сколько хотите.

b.     Если вы обучаете модель из более чем 100 слоев и все еще не проходит порог, нужно начать с небольшого количества слоев (1-2) и увеличивать сложность модели небольшими шагами.

c.      Вы используете любую комбинацию слоев (включая свертки, нормализацию и т.д.)

d.     Используете следующий код для тестирования модели:

reconstruction_mse = autoencoder.evaluate(X_test,X_test,verbose=0)

assert reconstruction_mse <= 0.005, "Compression is too lossy. See tips below."

assert len(encoder.output_shape)==2 and encoder.output_shape[1]==32, "Make sure encoder has code_size units"

print("Final MSE:", reconstruction_mse)

for i in range(5):

    img = X_test[i]

    visualize(img,encoder,decoder)

 

 

6.     Превратите получившуюся модель в шумоподавляющий автоэнкодер. Cохранив модельную архитектуру, измените способ ее обучения. Существует много стратегий применения шума. Мы реализуем два популярных: добавление гауссовского шума и использование dropout:

a.      Реализуйте добавление гауссовского шума:

def apply_gaussian_noise(X,sigma=0.1):

   """

   adds noise from normal distribution with standard deviation sigma

  :param X: image tensor of shape [batch,height,width,3]

   """

 

  <your code here>       

    return X + noise

b.     Тестирование шума:

theoretical_std = (X[:100].std()**2 + 0.5**2)**.5

our_std = apply_gaussian_noise(X[:100],sigma=0.5).std()

assert abs(theoretical_std - our_std) < 0.01, "Standard deviation does not match it's required value. Make sure you use sigma as std."

assert abs(apply_gaussian_noise(X[:100],sigma=0.5).mean() - X[:100].mean()) < 0.01, "Mean has changed. Please add zero-mean noise"

 

7.     Автокодировщик имеет ряд удивительных побочных эффектов. Посмотрите на это в действии. Подавая на вход изображение, найдите похожие изображения в скрытом пространстве. Чтобы ускорить процесс поиска, используйте локально-чувствительное хеширование поверх закодированных векторов.  Используйте реализацию scikit-learn для простоты. В практическом сценарии вы можете использовать специализированные библиотеки для повышения производительности и настройки:

a.      Внедрите функцию для нахождения похожих изображений

def get_similar(image, n_neighbors=5):

    assert image.ndim==3,"image must be [batch,height,width,3]"

    code = encoder.predict(image[None])

    (distances,),(idx,) = lshf.kneighbors(code,n_neighbors=n_neighbors)

    return distances,images[idx]

 

b.     Внедрите функцию для отображения похожих изображений

def show_similar(image):

    distances,neighbors = get_similar(image,n_neighbors=11)

    plt.figure(figsize=[8,6])

    plt.subplot(3,4,1)

    plt.imshow(image)

    plt.title("Original image")

    for i in range(11):

        plt.subplot(3,4,i+2)

        plt.imshow(neighbors[i])

        plt.title("Dist=%.3f"%distances[i])

    plt.show()

 

8.     Задачи для самостоятельной работы:

a.      Увеличить точность полученной модели.

b.     Реализуйте «Уменьшенную / ускоренную версию», с подробным анализом результатов


◄ Практическое задание №4
Практическое задание №6 ►
Пропустить Навигация
Навигация
  • В начало

    • Страницы сайта

      • Мои курсы

      • Теги

    • Мои курсы

    • Курсы

      • Осенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

          • ТОИ маг

          • Modern computer technology

          • Математика и её приложения в науке и инженерии

          • MUDP

          • ОНС-Н

          • RL

          • ИИ_НС

          • КрПр

          • КЗ

          • АДС

          • РПП

          • НИСНейрСети

            • Раздел 1. Введение в нейронные сети

            • Раздел 2. Глубокое обучение

            • Раздел 3. Глубокое обучение в NLP

              • ЗаданиеПрактическое задание №5

              • ЗаданиеПрактическое задание №6

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Весенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Воскресная компьютерная школа

        • Пользователь компьютера плюс

        • Пользователь прикладных программ

        • Программирование I ступень

        • Программирование II ступень

        • Программирование III ступень

        • Архив

      • Воскресная математическая школа

        • Открытое тестирование РНОМЦ и мехмата ЮФУ - 2025

        • Олимпиадная математическая школа

        • Повышение квалификации

        • Доступная математика

        • Лаборатория математического онлайн-образования мех...

        • Осенняя универсиада

        • Научно-практическая конференция

        • ВМШ

          • ВМШ - 24

        • Летняя олимпиадная математическая школа РНОМЦ и ме...

      • Государственная итоговая аттестация

      • Дополнительное образование

      • Олимпиады

      • Видеолекции

      • Разное

      • Архив курсов

      • Заочная школа мехмата ЮФУ

Служба поддержки сайта
Вы используете гостевой доступ (Вход)
НИСНейрСети
Сводка хранения данных
Скачать мобильное приложение Яндекс.Метрика