ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 26.10.2023
Просмотров: 72
Скачиваний: 6
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
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. СВЕРТОЧНЫЕ СЕТИ
Сверточные нейронные сети (CNN – Convolutional 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], визуализируйте все карты признаков построенной сети для произвольного входного изображе- ния.