Главная страница
Навигация по странице:

  • Лабораторная работа № 5

  • Лабораторная работа № 6

  • Лабораторная работа № 7

  • 5. ВАРИАЦИОННЫЕ АВТОКОДИРОВЩИКИ

  • Лабораторная работа № 8

  • 6. РЕКУРРЕНТНЫЕ СЕТИ НА БАЗЕ LSTM

  • практикум. Лабораторный практикум. Практикум санктпетербург 2021 2 Задание по практикуму


    Скачать 2.07 Mb.
    НазваниеПрактикум санктпетербург 2021 2 Задание по практикуму
    Анкорпрактикум
    Дата28.02.2022
    Размер2.07 Mb.
    Формат файлаpdf
    Имя файлаЛабораторный практикум.pdf
    ТипПрактикум
    #376927
    страница3 из 4
    1   2   3   4
    Листинг 10. Классификация MNIST сетью глубокого доверия

    26
    При вызове функции DBN() использовано много входных парамет- ров, определяющих особенности обучения модели modDBN. Для предва- рительного тренинга (предобучения со скоростью 0.1) задано 150 эпох для каждого уровня RBM. Обучение на основе градиентного спуска определе- но на 10000 эпохах со скоростью 0.5. Размер батча установлен равным 10.
    Параметр verbose = TRUE разрешает визуализацию процесса обучения – печать значения потерь (cost) на каждой эпохе.
    Для оценки результата классификации сетью глубокого доверия ис- пользована функция PredictDBN(), которая показывает достаточно не- плохую точность 0.916:
    Следует пояснить, почему при использовании функции PredictDBN() указан параметр layers = 4, хотя сеть modDBN включает три слоя nodes =
    c(500, 300, 150). Это сделано с учетом добавления контролируемого вы- ходного слоя.
    Лабораторная работа № 5
    Построить ограниченную машину Больцмана для понижения раз- мерности обучающей выборки. В качестве последней возьмите 10 произ- вольных изображений. Для их предварительной обработки используйте функцию листинга 6, задавая размеры 100 х 100 пикселов. Подберите па- раметры RBM для получения удовлетворительного качества. Визуализи- руйте полученные результаты.
    Сформируйте стек ограниченных машин Больцмана с помощью функции StackRBM(). Проведите исследование с тем же набором изобра- жений. Подберите параметры стека для получения удовлетворительного качества. Визуализируйте полученные результаты.
    Проделайте сравнительный анализ возможностей, предоставляемых для понижения размерности обучающей выборки отдельной RBM и стеком из RBM.

    27
    3. СЕТИ КОХОНЕНА
    Сети Кохонена – это одна из разновидностей нейросетевых алгорит- мов. Алгоритм функционирования самообучающихся карт SOM (Self
    Organizing Maps) представляет собой один из вариантов кластеризации многомерных векторов [10].
    Для моделирования сетей Кохонена используются функции somgrid() и som() из пакета kohonen. Для обученной сети с помощью функции plot() становится доступным для визуализации следующий комплект карт:
    codes - показывается распределение по решетке соотношения долей участия отдельных исходных переменных;
    counts - число исходных объектов в каждом узле сети;
    mapping - координаты исходных объектов на сформированной карте;
    property, quality, dist.neighbours - различными цветами изображается целый набор свойств каждого узла: доли участия отдельных исходных пе- ременных, меры парных или средних расстояний между нейронами и т.д.
    Рассмотрим пример, в котором используем три указанные функции.
    В качестве исходных данных для анализа используем фрейм данных wines, поставляемый с библиотекой kohonen. Фрейм wines, включает 177 строк и тринадцать столбцов, где приведены результаты химического анализа вин, выращенных в одном и том же регионе Италии (Пьемонт), но полученных из трех разных сортов винограда: Неббиоло, Барбера (Barbera) и Гриньо- лино (Grignolino). Вино из винограда сорта Неббиоло называется Бароло
    (Barolo). Данные содержат количества нескольких компонентов, присут- ствующих в каждом вине, а также некоторые спектроскопические пере- менные.
    Для каждой строки фрейма wines переменная vintages содержит мет- ки классов, соответствующие винтажам Barbera, Grignolino и Barolo.
    Листинг 10. Моделирование карт Кохонена

    28
    Как видно из листинга 10 перед кластеризацией исходные данные отмасштабированы функцией scale(). Для карты функцией somgrid() сфор- мирована сетка размером 10 х 17 и задана структура «шестиугольник».
    С помощью функции cutree() мы осуществили разбиение всех вин на три кластера и с помощью функции plot() построили карту Кохонена (рис.
    12). Дополнительная прорисовка кластеров выполнена с помощью функ- ции add.cluster.boundaries().
    Рис. 12. Карта Кохонена для трех кластеров
    Карта дополнена информацией о всех компонентах анализируемых векторов, с указанием названия компоненты и цвета отведенного для ее представления. Это позволяет визуально оценить качество кластеризации и принять решение об изменении числа кластеров для оптимизации разби- ения.
    Лабораторная работа № 6
    Построить карты Кохонена для тестовых наборов из ресурса Wine
    Quality
    (http://archive.ics.uci.edu/ml/machine-learning-databases/wine-
    quality/) репозитария [6]. Варианты заданий приведены в табл. 5.
    Таблица 5
    Варианты задания
    Вариант
    Обучающая выборка
    Четная цифра
    winequality-red.csv
    Нечетная цифра
    winequality-white.csv
    Отчет должен содержать описание тестового набора, подготовку обучающих данных, выбор и обоснование количества кластеров. Пред- ставленный в отчете код должен иметь подробный комментарий.

    29
    4. СВЕРТОЧНЫЕ СЕТИ
    Сверточные нейронные сети (CNNConvolutional Neural Networks) используют две основные операции – свертки и пулинга. В архитектуре сети слои, которые выполняют их, следуют друг за другом, постепенно из- влекая и выделяя характерные признаки анализируемых данных. Когда признаки достаточно выделены, требуемый результат формируется с по- мощью полносвязного слоя, в котором осуществляется анализ их взаимо- влияния на итог исследования.
    В отличие от классических нейронных сетей, для которых разрабо- тано большое число моделей, сверточные сети требуют «индивидуально- го» подхода к архитектуре. Поэтому для формирования CNN используют библиотеки, предоставляющие возможность формирования и объединения между собой отдельных слоев - свертки, пулинга и полносвязного слоя.
    Несмотря на то, что CNN специализирована для задач компьютерно- го зрения и распознавания изображений, она также оказалась полезной во многих других приложениях и часто используется на практике. Достаточ- но интересное погружение в сверточные сети можно найти на ресурсе [11].
    Здесь мы остановимся на двух аспектах, связанных с использованием моделей CNN – это переобучение и визуализация промежуточных актива-
    ций.
    Переобучение - распространенная проблема когда имеется только не- сколько образцов данных, на которых можно учиться. Это мешает модели хорошо обучиться. Один из методов, который помогает справиться с этой проблемой – приращение (augmentation) данных. Этот метод уменьшает переобучение за счет генерации большего количества обучающих данных из существующих выборок с помощью нескольких случайных преобразо- ваний, создающих правдоподобные изображения. Для модификации при- меняются такие операции, как сдвиг, переворачивание, масштабирование и тому подобные. Библиотека keras предоставляет удобные функции для ре- ализации метода аугментации в реальном времени.
    Пример использования данных функций представлен в листинге 11.
    В качестве образцов для аугментации выбран директорий cats-dogs, вклю- чающий jpeg изображения кошек и собак. Функция image_data
    _generator() позволяет определить необходимые диапазоны изменений па- раметров исходного изображения. В листинге 11 для этой функции ис- пользованы далеко не все доступные возможности настройки, подробно с назначением каждого параметра можно ознакомиться, например в [17].
    Изображения из директория приводятся к одинаковому размеру
    150х150 пикселов и преобразуются в тензор размерности 1,150,150,3. В строке 14 листинга 11, для простоты задается только одно 9-ое изображе- ние.

    30
    Функция flow_images_from_data() запускает работу генератора ауг- ментации augmentation_generator, который затем используется в цикле для вывода 12 последовательных преобразований исходного изображения
    fnames[[9]].
    Листинг 11. Приращение обучающего набора путем аугментации
    Результат работы скрипта листинга 11 представлен на рис. 13. Отсю- да видно, что трансформации параметров изображения осуществляются по случайному закону.

    31
    Рис. 13. Результат аугментации
    Получаемые изображения существенно дополняют палитру обучаю- щих данных, помогая справляться с проблемой переобучения нейронной сети.
    Визуализация промежуточных активаций помогает понять как пре- образуются входные данные по мере прохождения по слоям нейронной се- ти (вывод результата функций активации слоя называют его активацией).
    Карты признаков изучаемые сверточными нейронными сетями, легко под- даются визуализации благодаря тому, что представляют визуальные объ- екты. Визуализация активаций заключается в отображении карт признаков, которые выводятся разными сверточными и объединяющими слоями сети в ответ на определенные входные данные.
    Рассмотрим особенности использования функций, предоставляемых библиотекой keras для визуализации активаций. В качестве объекта иссле- дования можно загрузить любую сохраненную модель CNN. Это выполня- ется с помощью функции load_model_hdf5(). Загрузим обученную модель из [19] и создадим экземпляр модели из входного тензора и списка выход- ных тензоров (листинг 12 ).
    Листинг 12. Загрузка модели и создание экземпляра
    Характеристика слоев используемой нейронной сети приведены в табл. 6. По мере продвижения от входа к выходу размеры карт признаков постепенно уменьшаются, а их число увеличивается.
    Таблица 6
    Характеристика слоев нейронной сети cats_and_dogs_small_1
    Созданный с помощью функции keras_model() экземпляр модели ac-
    tivation_model позволяет сформировать активацию для любой карты при-
    Номер и тип слоя
    Размер карты признаков Число карт
    1 Свертка
    148 х 148 32 2 Пулинг
    74 х 74 32 3 Свертка
    72 х 72 64 4 Пулинг
    36 х 36 64 5 Свертка
    34 х 34 128 6 Пулинг
    17 х 17 128 7 Свертка
    15 х 15 128 8 Пулинг
    7 х 7 128

    32 знаков в каждом из восьми слоев. Для ее визуализации удобно использо- вать функцию plot_channel() представленную в листинге 13.
    Для анализа получаемых послойных активаций выберем произволь- ное входное изображение img из тестовой выборки, преобразуем его в тен- зор img_tensor размерности 1, 150, 150, 3 и нормализуем img_tensor =
    img_tensor / 255. Используя полученный img_tensor в качестве входного параметра функции predict() будем в цикле использовать функцию
    plot_channel().
    Листинг 13. Функция визуализации карты признаков
    На рис. 14 приведены примеры визуализации одной, случайно вы- бранной карты признаков на каждом слое.
    Рис. 14. Примеры визуализации карты признаков по слоям
    Как видно из рисунка, по мере продвижения по слоям активации изображения становятся все более абстрактными, а их визуальная интер- претация становится сложней. По сути они начинают кодировать высоко- уровневые представления и несут все меньше информации об исходном изображении и все больше — о классе изображения. Последняя карта напоминает QR-код, в котором закодирована информация о классе при- надлежности изображения поданного на вход.
    Лабораторная работа № 7
    Изучите особенности использования функции
    image_data_generator(). Продемонстрируйте возможности управления все- ми ее параметрами для формирования обучающих примеров. Какие пара- метры являются наиболее эффективными?
    Выберите несколько произвольных изображений относящихся к двум классам, сформируйте достаточный обучающий набор на базе функ- ции flow_images_from_data() и постройте простую сверточную нейронную сеть решающую задачу классификации.

    33
    Дополнительно: используя информацию из [19], визуализируйте все карты признаков построенной сети для произвольного входного изображе- ния.

    34
    5. ВАРИАЦИОННЫЕ АВТОКОДИРОВЩИКИ
    Классический автокодировщик учится представлять входные данные в скрытом пространстве уменьшенных размеров. Он изучает произволь- ную функцию для выражения входных данных в сжатом скрытом пред- ставлении. Вариационный автокодировщик (VAE) вместо изучения произ- вольной функции изучает параметры распределения вероятностей сжатого представления. Если мы сможем выбирать точки из этого распределения, мы сможем сгенерировать новые данные. В этом смысле VAE относится к генеративным моделям нейросетей.
    Вариационный автокодировщик состоит из двух сетей: сети кодера и сети декодера (рис. 15). Кодер — это нейронная сеть, которая принимает входные данные x и выдает скрытое представление z. Целью сети кодера является для каждого x предсказать два значения — среднее значение

    и отклонение (дисперсию)

    нормального распределения, из которого сэм- плируются случайные образцы z. По сути, кодер в VAE изучает распреде- ление вероятностей P

    (z|x), где

    — параметр сети кодера.
    Рис. 15. Структура вариационного автокодировщика
    Целью сети декодера является восстановление входных данных x из случайного образца z (z принадлежит распределению с параметрами μ и σ).
    Его задача — предсказать распределение вероятностей Q
    ф
    (x|z), где ф — параметр сети декодера.
    В типичном VAE функция потерь состоит из двух частей: потери восстановления и потери регуляризатора. Для одного обучающего примера функция потерь задается следующим уравнением:

    35
    ( )
    ( | )
    [
    ( | ))
    ( | )| ( )
    Первый член уравнения — потери реконструкции, а второй — это расхождение Кульбака-Лейблера (KL) между изученным распределением вероятностей, и истинным распределением скрытой переменной,. В VAE предполагается, что скрытые переменные происходят из стандартного нормального распределения, то есть P (z) есть N (0, 1).
    Рассмотрим пример реализации вариационного автокодировщика для генерации изображений [18]. В качестве изображений используется набор данных Fashion MNIST, который поставляется вместе с библиотекой
    keras. В листинге 14 загружаются необходимые библиотеки и набор дан- ных разбивается на две части: для обучения x_train и тестирования x_test
    (строки 1 - 8).
    Листинг 14. Формирование
    вариационного автокодировщика

    36
    В листинге 14 представлены последовательные шаги формирования вариационного автокодировщика.
    На шаге 1 задаются параметры обучения – размер батча, размерности входа, параметров μ и σ и количество эпох.
    На шаге 2 определяется входной и скрытый слой сети кодера. Далее, на шаге 3 формируется скрытый слой для представления параметров μ и σ.
    На шаге 4 определяется функция сэмплирования, которая позволяет генерировать новую точку из скрытого пространства, а на шаге 5 форми- руется слой, в котором из параметров μ и σ скрытого распределения гене- рируется случайный образец z.
    На шаге 6 мы создаем два скрытых слоя для части декодера VAE и объединяем их, чтобы создать выходной слой. Наконец, на шаге 7 мы формируем вариационный автокодировщик. Используя функцию
    summary() можно изучить подробную структуру модели vae.
    Листинг 15. Обучение и тестирование

    37
    В листинге 15 описаны шаги, необходимые для обучения и тестиро- вания сформированного VAE. На шаге 8 и 9 создаются отдельные модели кодера и декодера, которые используются при реконструкции изображения из точки скрытого пространства случайного распределения. На шаге 10 определяется функция потерь vae_loss(), учитывающая как потери восста- новления, так и потери регуляризатора.
    На шаге 11, после компиляции, определяющей стандартный оптими- затор rmsprop и свою функцию потерь vae_loss(), проводится обучение
    VAE. График изменения потерь при обучении loss и тестировании val_loss от 2-ой до 10-ой эпохи приведен на рис. 16.

    38
    Рис. 16. Уменьшение потерь на 10 эпохах
    Проверка работоспособности VAE выполняется на шаге 11. Для пяти случайных точек скрытого пространства из random_distribution декодер в цикле формирует предсказания, то есть выходные векторы размерности
    784 в переменной one_pred. Эти векторы преобразуются в матрицы раз- мерности 28 х 28, которые сохраняются в переменной predicted.
    Рис. 17. Изображения сгенерированные VAE
    С помощью функции grid.raster() сгенерированные VAE изображе- ния визуализируются (рис. 17).
    Лабораторная работа № 8
    Изучить особенности работы вариационного автокодировщика. По- строить VAE для генерации рукописных цифр, используя набор MNIST.
    Подобрать параметры обучения для получения качественной реконструк- ции.

    39
    6. РЕКУРРЕНТНЫЕ СЕТИ НА БАЗЕ LSTM
    Рекуррентные сети часто используют для решения креативных задач.
    Рассмотрим пример использования модуля LSTM для реализации рекур- рентной сети, которая будет генерировать текст из заданного начального набора, состоящего из трех слов. Исходный текст или целый набор текстов при работе с языковыми моделями принято называть корпусом.
    Чтобы построить языковую модель, нужно «очистить» текст, ис- пользуемый для обучения, и разбить его на токены. Для этих целей удобно использовать токенизатор keras, который разбивает корпус на список то- кенов, удаляет все знаки препинания, преобразует слова в нижний регистр и строит внутренний словарь на основе введенного текста. Словарь гене- рируемый токенизатором, представляет собой индексированный список, в котором слова индексируются по их общей частоте в наборе данных.
    Возьмем в качестве исходного текста стихотворение К. Чуковского
    «Муха Цокотуха» и посмотрим насколько хорошо сеть может обучаться стихосложению. Подготовка исходных данных выполняется в листинге 16.
    1   2   3   4


    написать администратору сайта