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

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

  • Классификация объектов

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

  • Построение автокодировщиков

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

  • 2. ОГРАНИЧЕННЫЕ МАШИНЫ БОЛЬЦМАНА

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


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

    Листинг 2. Прогнозирование временного ряда
    Попробуйте изменять значения параметров сети Nnet, заданные в ли- стинге 2, изучая их влияние на качество прогнозирования. Будет несложно

    13 заметить, как меняется качество прогноза непосредственно на результи- рующем графике (рис. 7).
    Здесь результирующий график построен с использованием функции
    ggplot(), которая предоставляет гораздо больше возможностей по сравне- нию с функцией plot(). Для качественной визуализации результатов любых исследований знание возможностей, которые предоставляют эти функции, и приобретение навыков их применения чрезвычайно полезно. Достаточно просто и кратко необходимые сведения об этих функция изложены в 5 и 6 разделах веб-ресурса [5].
    На графике рис. 5 прогноз, сделанный сетью представлен тонкой желтой кривой поверх синего графика временного ряда а10. Можно заме- тить, что его начало сдвинуто на 12 месяцев.
    Рис. 7. График числа рецептов а10 (синий) и предсказанный сетью (желтый)
    Можно воспользоваться функцией plotnet() из библиотеки
    NeuralNetTools и отобразить архитектуру обученной сети Nnet (рис. 8). Си- наптические связи с положительными весами выделены на рис. 8 красным цветом, а с отрицательными – синим.

    14
    Рис. 7. Архитектура сети Nnet
    Лабораторная работа № 2
    Составить прогноз для заданного временного ряда с использованием библиотеки nnet. Отчет должен содержать подготовку данных для обуче- ния сети. Обоснование выбранной архитектуры. Структурную схему обу- ченной сети без указания весов. Варианты заданий приведены в табл. 3, где указаны названия временных рядов, которые доступны из библиотеки
    fpp2 [8].
    Таблица 3
    Варианты задания
    Вариант
    Временной ряд
    0
    auscafe
    1
    austourists
    2
    calls
    3
    debitcards
    4
    departures (resshort)
    5
    elecequip
    6
    qauselec
    7
    qcement
    8
    qgas
    9
    departures (visshort)
    Графики прогнозируемого и спрогнозированного временного ряда построить с использованием функции ggplot().
    Классификация объектов
    Задача классификации очень часто встречается на практике.
    Если распознаются только два класса, то в выходном слое персептрона нахо- дится только один нейрон, который обладает двумя реакциями. Если классов больше двух, то для каждой группы устанавливается свой нейрон.
    Рассмотрим основные приемы часто используемые при анализе данных для множественной классификации. Проще всего их продемон- стрировать на классическом примере классификации сортов ирисов.

    15
    Набор iris [4], который включает 150 измерений параметров длины и ши- рины чашелистика (sepal) и лепестка (petal) трех сортов ирисов Фишера: щетинистого (Setosa), виргинского (Virginica) и разноцветного
    (Versicolor), по 50 измерений для каждого сорта.
    Функция summary(), запущенная в консоли RStudio, позволяет озна- комиться с основными параметрами этого набора данных iris:
    Отсюда видно, что имеется четыре входных параметра (Sepal.Length,
    Sepal.Width, Petal.Length, Petal.Width) и три категории сорта (species) ири- сов. Исходя из этого, можно предложить архитектуру персептрона, изоб- раженную на рис. 8, где в скрытом слое условно изображено 6 нейронов.
    Рис. 8. Архитектураперсептрона для классификации данных iris
    При подготовке наборов данных (data set) весь набор делят на две части – обучающий или тренировочный набор (train set) и проверочный или тестовый набор (test set). Часто соотношение составляет 70-75% и 30-
    25%. Несмотря на то, что набор данных iris состоит всего из 150 векторов, сделаем такое разбиение. Важно здесь то, что нужно разбить весь набор на две части так, чтобы в любой из них представители из каждой категории или класса были в равных долях. В листинге 3, решающем задачу класси- фикации данных на основе модели nnet, это разбиение выполняется в строке 14, где в samp формируется по 35 случайных номеров векторов из каждой категории для обучающего набора.

    16
    Обратите внимание на интересный прием, который используется для формирования тестового набора. Если в обучающий набор
    train.set вклю- чаются все векторы с номерами из samp (строка 17), то в тестовый набор
    test.set – все остальные векторы и это записывается следующим образом
    data.iris[-samp,] (строка 18).
    В листинге 3 использовано всего 2 нейрона в скрытом слое size = 2 и, как мы увидим их вполне достаточно для решения этой простой задачи.
    Кроме наборов входных train.set и выходных targets[samp,] обучающих векторов и значения size, которые всегда необходимо формировать, задан только один параметр maxit, определенный по умолчанию. Его значение по умолчанию равно maxit = 100, а мы задали значение maxit = 500.
    Листинг 3. Классификация набора iris
    Поскольку, по умолчанию параметр trace = TRUE, визуальное от- слеживание процесса обучения сети включено и мы увидим следующее:
    > net.iris <- nnet(train.set,targets[samp,], size = 2, maxit = 500)
    # weights: 19 initial value 78.686545 iter 10 value 43.022535 iter 20 value 25.951476 iter 30 value 24.543711 iter 40 value 24.161124
    iter 50 value 23.892634

    17 iter 60 value 22.477187 iter 70 value 22.342019 iter 80 value 22.106268 iter 90 value 21.860257 iter 100 value 21.258000 iter 110 value 20.159820 iter 120 value 19.850850 iter 130 value 19.684387 iter 140 value 19.446336 iter 150 value 19.419291 final value 19.418854 converged
    Мы видим, что сформированная функцией nnet() сеть net.iris вклю- чает 19 обучаемых весов (объясните почему) и ошибка обучения или поте- ри уменьшаются в процессе итераций. В итоге, для сходимости процесса обучения в нашем случае потребовалось 150 итераций. Таким образом, следует уяснить, что сеть закончит обучение либо выполнив число итера- ций, заданное параметром maxit,либо достигнув заданной точности (пара- метрами abstol и reltol).
    Для оценки качества классификации удобно использовать провероч- ную матрицу, которая показывает, как сеть справилась с задачей. Для по- строения такой матрицы можно использовать две функции table() и
    max.col(), а в качестве параметров то, что требовалось получить на выходе сети и то, что она получила. В нашем случае результат выполнения кода строки 28 будет следующим:
    > table(max.col(targets[-samp,]), max.col(net.pred))
    1 2 3 1 14 0 1 2 0 15 0 3 0 0 15
    Номера строк и столбцов соответствуют трем классам, на которые сеть должна разбить входные векторы. Очевидно, поскольку в тестовом наборе мы оставили по 15 векторов каждого класса, идеальным результа- том является диагональная матрица с элементами 15, 15, 15. Полученный результат говорит о том, что сеть выдала только одно неверное предсказа- ние, отнеся вектор первого класса к третьему. Попробуйте устранить этот недочет и поделитесь полученным результатом.
    Лабораторная работа № 3
    Для выполнения лабораторной работы воспользуемся данными до- ступными на ресурсе http://archive.ics.uci.edu/ml/datasets/Vertebral+Column.

    18
    Загрузите архив vertebral_column_data.zip и выберите из этого архива файл
    column_3C.dat.
    Файл содержит результаты рентгенологического исследования 310 пациентов. Каждый пациент представлен в наборе данных шестью пара- метрами, определяемыми формой и ориентацией таза и поясничного отде- ла позвоночника в следующем порядке: угол падения таза, наклон таза, угол поясничного лордоза, наклон крестца, радиус таза и степень спонди- лолистеза. Для обозначений классов используется следующее соглашение:
    DH (грыжа диска), спондилолистез (SL) и нормальный (NO).
    Подготовить набор данных используя файл column_3C.dat. Постро- ить и обучить сеть для классификации диагноза пациентов. Отчет должен содержать подготовку данных для обучения сети. Обоснование выбранной архитектуры. Проверочную матрицу для оценки качества классификации.
    Построение автокодировщиков
    Автокодировщики представляют интересный тип нейронных сетей, задачей которых является максимально возможное сжатие входного векто- ра и его воссоздание из этого сжатого представления. В связи с этим, ха- рактерной особенностью автокодировщиков является совпадение количе- ства нейронов на входном и выходном слое.
    Сама по себе способность сжимать данные используется редко, однако автокодировщики можно ис- пользовать для предобучения, например, когда стоит задача классифика- ции, а размеченных пар слишком мало, либо когда просто надо научиться различать полезные свойства входного сигнала.
    Рассмотрим пример построения, обучения и проверки автокодиров- щика для букв латинского алфавита в стилизации art1_letters.pat из набора данных snnsData библиотеки RSSNS. Для построения используем модель персептрона neuralnet с числом входов и выходов 35 и числом нейронов в скрытом слое hidden = 10. Число входов и выходов сети определяется дли- ной вектора представления букв 7х5 = 35, а число нейронов скрытого слоя определялось в процессе обучения.
    Листинг 4. Автокодировщик букв латинского алфавита art1_letters.pat

    19
    Подготовка обучающей выборки в данном случае не составля- ет труда, так как входной и выходной наборы совпадают и взяты непосредственно из библиотеки (строка 4 – 6, листинг 4). Для визуа- лизации алфавита использована функция print.alphabet(), ее содер- жание раскрыто в листинге 5.
    Обратите особое внимание на способ формирования формул для входов и выходов автокодировщика. Поскольку их размерность равна 35, то вручную записывать такие последовательности трудо- емко. Поэтому удобно воспользоваться функциями конкатенации
    paste0() и as.formula() (строка 9 – 11, листинг 4), результатом исполь- зования которых получена необходимая формула. Для проверки пра- вильности формирования формулы посмотрим содержимое пере- менной form:
    > form in1 + in2 + in3 + in4 + in5 + in6 + in7 + in8 + in9 + in10 + in11 + in12 + in13 + in14 + in15 + in16 + in17 + in18 + in19 + in20 + in21 + in22 + in23 + in24 + in25 + in26 + in27 + in28 + in29 + in30 + in31 + in32 + in33 + in34 + in35

    in1 + in2 + in3 + in4 + in5 + in6 + in7 + in8 + in9 + in10 + in11 + in12 + in13 + in14 + in15 + in16 + in17 + in18 + in19 + in20 + in21 + in22 + in23 + in24 + in25 + in26 + in27 + in28 + in29 + in30 + in31 + in32 + in33 + in34 + in35

    20
    Как видим, сначала сформированы имена выходов, объединен- ные знаком «+», а затем, после знака «», имена входов. Правда, здесь они совпадают.
    Следует отметить, что функция neuralnet() позволяет подби- рать оптимальные значения для более, чем десятка параметров. Здесь мы задаем только два: число нейронов в скрытом слое hidden = 10 и достаточно низкий порог функции ошибки threshold = 0.0006.
    Обученный автокодировщик тестируем на том же входном наборе, на котором обучали с помощью функции predict().
    Листинг 5. Функция визуализации алфавита
    Для визуализации результатов обучения удобно использовать описанную выше функцию print.alphabet(). На рис. 9 приведен ре- зультат работы обученной сети в сравнении с обучающей выборкой.
    Рис. 9. Обучающая выборка и восстановленный алфавит при сжатии 3.5
    В скрытом слое было использовано 10 нейронов, поэтому коэффици- ент сжатия входного вектора равен 35/10 = 3.5. Попробуйте менять пара- метры сети (hidden и threshold) с тем, чтобы получить качественное вос- становление для других коэффициентов сжатия.

    21
    Лабораторная работа № 4
    Построить автокодировщик для заданной обучающей выборки. От- чет должен содержать подготовку данных для обучения сети. Формирова- ние формул для входа и выхода. Визуализацию обучающей выборки и вос- становленного образца. Структурную схему обученной сети без указания весов. Варианты заданий приведены в табл. 4, где указаны названия фай- лов с обучающей выборкой, которые доступны из библиотеки RSNNS [4].
    Таблица 4
    Варианты задания
    Вариант
    Обучающая выборка
    Четная цифра
    snnsData$letters_auto.pat
    Нечетная цифра
    snnsData$artmap_test.pat
    Оценку максимально возможного сжатия производить визуально.
    Визуализировать обучающие выборки можно с использованием функции листинга 5, выполняя вызовы print.alphabet(snnsData$letters_auto.pat,14) и
    print.alphabet(snnsData$artmap_test.pat,8)

    22
    2. ОГРАНИЧЕННЫЕ МАШИНЫ БОЛЬЦМАНА
    Ограниченные машины Больцмана (r
    estricted Boltzmann machine -
    RBM)
    являются особым видом генеративных стохастических нейронных сетей, которые обучаются методом градиентного спуска с контрастивной дивергенцией [12]. На практике RBM используются для снижения размер- ности данных, классификации и выделения признаков. Большой практиче- ский интерес представляют также сети глубокого доверия (deep belief
    network - DBN), которые строятся путем специального каскадирования
    RBM.
    Изучение моделей RBM и DBN построим на базе функций библиоте- ки Timo Matzen из [13].
    Функции RBM() и StackRBM() позволяют изучать соответствующие модели, а функции ReconstructRBM() и PredictRBM() предоставляют воз- можность визуализировать реконструированные векторы и оценить каче- ство классификации.
    Листинг 6. Функция подготовки изображений
    Часто в качестве обучающего набора используются изображения.
    Когда подобные наборы формируются самостоятельно, удобно иметь ав- томатизированное средство для подобной подготовительной работы. В ка-

    23 честве подобного средства предлагается функция подготовки изображений
    image_conversion(), представленная в листинге 6. Функция обрабатывает все изображения размещенные в некотором директории, выполняя следу- ющие действия: приводит размеры изображения к заданным (width х
    height), преобразует в черно-белое, представляет как вектор и формирует результирующую матрицу всех изображений. Возвращаемая матрица име- ет размеры – число строк равно числу обработанных изображений, число столбцов равно произведению width х height.
    Для использования функции image_conversion() необходимо предва- рительно заполнить выделенный директорий файлами с изображениями.
    Данная функция построена на базе возможностей предоставляемых биб- лиотеками EBImage и pbapply. На рис. 10 приведен результат использова- ния этой функции (первый ряд – приведение к размеру 28х28, второй ряд – перевод в черно-белое изображение).
    Рис. 10. Преобразование изображений
    Рассмотрим варианты использования функций библиотеки RBM для понижения размерности обучающей выборки изображений. В качестве обучающей выборки загрузим изображения котят из веб-ресурса
    https://ru.wallpaper.mob.org/ и разместим их в рабочем директории в папке
    Cats (пример части загруженных изображений на рис. 10). Указанный ре- сурс является свободно распространяемым и может быть использован для загрузки изображений различных категорий.
    Библиотека RBM предоставляет как функцию RBM(), моделирую- щую отдельно взятую ограниченную машину Больцмана, так и функцию
    StackRBM(), позволяющую формировать стек из этих машин. В листинге 7 приведен пример использования обеих функций RBM() и StackRBM().
    После загрузки необходимых библиотек с помощью описанной выше функции image_conversion() формируется обучающая выборка изображе- ний размером 28х28 пикселей. Для ограниченной машины Больцмана за- дается скрытый слой из 196 нейронов и устанавливается 400 итераций
    (эпох) обучения.
    Чтобы обеспечить наглядное сравнение результатов обучения от- дельной ограниченной машины Больцмана и стека из этих машин вводится параметр mflow = c(2,10) задающий печать двух строк по 10 изображений.

    24
    Для стека ограниченных машин Больцмана задается три скрытых слоя с числом нейронов 392, 196 и 98. В качестве дополнительных пара- метров задается мини-батч размером 10, а также скорость обучения и ко- эффициенты lambda и momentum.
    Листинг 7. Обучение ограниченных машин Больцмана
    Для того, чтобы обеспечить вывод в цикле произвольного числа ре- конструированных изображений оригинальная функция ReconstructRBM(), представленная в листинге 8, была частично изменена и обозначена Re-
    sultRBM() (листинг 9).
    Листинг 8. Оригинальная функция печати реконструированных изображений

    25
    Измененные части в оригинальной и измененной версии функции выделены желтым цветом.
    Листинг 9. Измененная функция печати реконструированных изображений
    Результат работы сети mod, моделирующей ограниченную машину
    Больцмана и modCat, моделирующей стек ограниченных машин, приведе- ны на рис. 11.
    Рис. 11. Результат работы нейронной сети mod и modCat
    Функция DBN() обучает сеть глубокого доверия, начиная с предва- рительно обученного стека неконтролируемых RBM, используя функцию
    StackRBM(), а затем добавляется контролируемый выходной слой. Резуль- тирующая сеть DBN настраивается по контролируемому критерию с ис- пользованием обратного распространения. Качество обучения позволяет оценить функция PredictDBN().
    Рассмотрим использование сети глубокого доверия для классифика- ции образов на примере функции DBN(). В качестве обучающей и тестовой выборки возьмем классический набор MNIST (листинг 10).
    1   2   3   4


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