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

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

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

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

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

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

  • Лаба. 2021 Лабораторный практикум по НТ. Технологии


    Скачать 6.22 Mb.
    НазваниеТехнологии
    Дата24.04.2023
    Размер6.22 Mb.
    Формат файлаpdf
    Имя файла2021 Лабораторный практикум по НТ.pdf
    ТипПрактикум
    #1084536
    страница3 из 4
    1   2   3   4

    Лабораторная работа № 5
    Построить ограниченную машину Больцмана для понижения размер- ности обучающей выборки. В качестве последней возьмите 10 произволь- ных изображений. Для их предварительной обработки используйте функ- цию листинга 6, задавая размеры 100 х 100 пикселов. Подберите параметры
    RBM для получения удовлетворительного качества. Визуализируйте полу- ченные результаты.
    Сформируйте стек ограниченных машин Больцмана с помощью функ- ции StackRBM(). Проведите исследование с тем же набором изображений.
    Подберите параметры стека для получения удовлетворительного качества.
    Визуализируйте полученные результаты.
    Проделайте сравнительный анализ возможностей, предоставляемых для понижения размерности обучающей выборки отдельной RBM и стеком из RBM.

    26
    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. Моделирование карт Кохонена

    27
    Как видно из листинга 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
    Отчет должен содержать описание тестового набора, подготовку обу- чающих данных, выбор и обоснование количества кластеров. Представлен- ный в отчете код должен иметь подробный комментарий.

    28
    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-ое изображение.
    Функция flow_images_from_data() запускает работу генератора ауг- ментации augmentation_generator, который затем используется в цикле для

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

    30
    Получаемые изображения существенно дополняют палитру обучаю- щих данных, помогая справляться с проблемой переобучения нейронной сети.
    Визуализация промежуточных активаций помогает понять как пре- образуются входные данные по мере прохождения по слоям нейронной сети
    (вывод результата функций активации слоя называют его активацией).
    Карты признаков изучаемые сверточными нейронными сетями, легко под- даются визуализации благодаря тому, что представляют визуальные объ- екты. Визуализация активаций заключается в отображении карт признаков, которые выводятся разными сверточными и объединяющими слоями сети в ответ на определенные входные данные.
    Рассмотрим особенности использования функций, предоставляемых библиотекой keras для визуализации активаций. В качестве объекта иссле- дования можно загрузить любую сохраненную модель CNN. Это выполня- ется с помощью функции load_model_hdf5(). Загрузим обученную модель из
    [19] и создадим экземпляр модели из входного тензора и списка выходных тензоров (листинг 12 ).
    Листинг 12. Загрузка модели и создание экземпляра
    Характеристика слоев используемой нейронной сети приведены в табл. 6. По мере продвижения от входа к выходу размеры карт признаков постепенно уменьшаются, а их число увеличивается.
    Таблица 6
    Характеристика слоев нейронной сети cats_and_dogs_small_1
    Созданный с помощью функции keras_model() экземпляр модели acti-
    vation_model позволяет сформировать активацию для любой карты призна- ков в каждом из восьми слоев. Для ее визуализации удобно использовать функцию plot_channel() представленную в листинге 13.
    Номер и тип слоя
    Размер карты признаков Число карт
    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

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

    32
    5. ВАРИАЦИОННЫЕ АВТОКОДИРОВЩИКИ
    Классический автокодировщик учится представлять входные данные в скрытом пространстве уменьшенных размеров. Он изучает произвольную функцию для выражения входных данных в сжатом скрытом представле- нии. Вариационный автокодировщик (VAE) вместо изучения произвольной функции изучает параметры распределения вероятностей сжатого представ- ления. Если мы сможем выбирать точки из этого распределения, мы сможем сгенерировать новые данные. В этом смысле VAE относится к генеративным моделям нейросетей.
    Вариационный автокодировщик состоит из двух сетей: сети кодера и сети декодера (рис. 15). Кодер — это нейронная сеть, которая принимает входные данные x и выдает скрытое представление z. Целью сети кодера является для каждого x предсказать два значения — среднее значение
    µ
    и отклонение (дисперсию) s
    нормального распределения, из которого сэм- плируются случайные образцы z. По сути, кодер в VAE изучает распределе- ние вероятностей P
    q
    (z|x), где q
    — параметр сети кодера.
    Рис. 15. Структура вариационного автокодировщика
    Целью сети декодера является восстановление входных данных x из случайного образца z (z принадлежит распределению с параметрами μ и σ).
    Его задача — предсказать распределение вероятностей Q
    ф
    (x|z), где ф — па- раметр сети декодера.
    В типичном VAE функция потерь состоит из двух частей: потери вос- становления и потери регуляризатора. Для одного обучающего примера функция потерь задается следующим уравнением:
    𝑙(𝜃, 𝜙) = 𝐸
    !

    #
    !
    (
    𝑧
    |
    𝑥
    )
    +log 𝑄
    '
    (𝑥|𝑧1) − 𝐾𝐿[𝑃
    (
    (𝑧|𝑥)|𝑁(0, 𝐼)]

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

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

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

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

    37
    Здесь исходный текст преобразовывается в последовательность токе- нов. Обратите внимание, что аргумент num_words функции text_tokenizer() определяет максимальное количество сохраняемых слов в зависимости от их частоты. Это означает, что в закодированной последовательности сохра- няются только первые n часто встречающихся слов, в нашем случае 350.
    Далее обучающая выборка формируется в виде матриц X и Y. Каждая строка входной матрицы X содержит три последовательные слова из текста, представленные соответствующими им токенами, а в матрице Y записыва- ется токен слова, следующего за этими тремя. Длина начального набора
    inp_len выбрана нами равной трем, но может быть любой.
    Скрипт формирования и обучения LSTM модели представлен в ли- стинге 17. Структура модели строится с помощью четырех функций – встра- ивания layer_embedding(), определения числа модулей layer_lstm(), форми- рования полносвязного слоя layer_dense() и задания функции активации
    layer_activation(). Сначала мы инициализировали последовательную мо- дель, а затем добавили к ней слой внедрения. Далее мы добавили слой LSTM с 50 модулями. Поскольку предсказание слова – это проблема классифика- ции, при которой следующее слово выбирается из словаря, мы добавили полносвязный слой с числом нейронов, равным количеству слов в словаре и с функцией активации softmax.
    1   2   3   4


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