Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
17
Добавлен:
13.02.2021
Размер:
2.09 Mб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ

РОССИЙСКОЙ ФЕДЕРАЦИИ

Московский Политехнический Университет (МПУ)

Кафедра «Автоматика и управление»»

ЛАБОРАТОРНАЯ РАБОТА №2

по дисциплине

«Технологии нейронных сетей принятия решений»

Выполнил:

Преподаватель:

к.т.н. доцент

Цель работы: создание модели нейронной сети с помощью М-файла в программной среде MatLab.

Используемое оборудование: MatLab 2016b

Теоретическое введение

Для создания модели нейронной сети в программной среде MatLab чаще пользуются скриптингом – написанием кода на языке программирования, последовательное выполнение которого приведёт к созданию модели или выполнению каких-либо операций. Скрипты можно прописывать прямо в командной строке, но это неудобно с точки зрения исправления ошибок и засорения области ненужной информацией, также при описании сложных функций или скриптов общий вид кода будет не понятен окружающим, а иногда и самому автору.

Для соблюдения чёткого описания конкретных функций и последующей адекватной обработки ошибок кода пользуются М-файлами либо М-функциями.

М-файл – последовательность команд, сгруппированная в одной функции, которая не принимает значений аргументов и не возвращает.

Аналог на С – void some_function (void).

М-функция – обладает полным функционалом М-файла, но имеет как входные аргументы, так и выходные (которые она возвращает по выполнению).

Аналог на С – int cool_function (int A, char B)

Для того чтобы создать М-файл необходимо кликнуть в главной панели New – M-file.

После создания М-файла, перед пользователем появляется окно, в котором можно описывать последовательность команд – всё как при написании программы в любой другой программной среде – Visual Studio, Borland Delphi, NotePad++:

Рис. 1.1. Командное поле М-файла

Особенности MatLab в отличие от других программных сред – нумерация в циклах начинается с 1, а не с 0, при описании цикла не нужны фигурные скобки, но необходим «end», наличие « ; » в конце команды означает её выполнение, без отображения результата.

Функции Neural Network Toolbox необходимые для создания модели нейронной сети:

  1. newff – создание однонаправленной сети

  2. logsig – сигмоидная (логистическая) функция активации

  3. purelin – линейная функция активации

  4. train – тренировка нейронной сети

  5. sim – моделирование нейронной сети

  6. postreg – линейный регрессионный анализ выходов сети по отношению к целевым значениям обучающего массива

Задача:

Задан массив, состоящий из нескольких значений функции (С>0) на интервале (0,1).

Создать нейронную сеть такую, что при вводе этих значений (x и у) на входы сети на выходах получались бы значения параметров A, B и C.

Выполнение

Для того, чтобы сеть была достаточно точной и выполняла свою задачу, необходимо её натренировать. На практике точность сети достигается не только увеличением выборки, но и её «наглядностью», а также увеличением/уменьшением количества нейронов в скрытых слоях.

Входной массив (P) представляет собой значения функции Y от входного аргумента Х на интервале от 0.00 до 1.0 с шагом 0.05.

Как пример можно привести мониторинг состояния какой-либо системы – у неё есть выходной параметр, фиксируемый на графе, где Х – шкала времени и нам необходимо узнать значения внутренних параметров системы A,B,C располагая лишь Y(X).

Для тренировки сети, составим M = 100, каждый входной вектор будет иметь N = 21 значение y(x=0.00, 0.05, 0.10 … 1), а каждый выходной вектор будет иметь 3 значения – A,B,C.

Для подготовки входного и эталонного массивов воспользуемся следующим алгоритмом. Выбираем случайным образом значения компонент вектора – эталона A, B, С и вычисляем компоненты соответствующего входного вектора y(x[]). Повторяем эту процедуру М раз и получаем массив входных векторов в виде матрицы размерностью NxM и массив векторов – эталонов в виде матрицы размерностью в нашем случае 3хМ. Полученные массивы мы можем использовать для обучения сети.

Рис. 1.2. Тестовые массивы и эталоны, подготовка файла, teach_array.

С помощью этой программы формируется матрица P из M=100 входных векторов-столбцов, каждый из которых сформирован из 21 точки исходной функции со случайно выбранными значениями параметров A,B,C и матрица T эталонов из 100 эталонных векторов-столбцов, каждый из которых сформирован из 3 соответствующих эталонных значений. Матрицы P и T будут использованы при обучении сети. Следует отметить, что при каждом новом запуске этой программы будут формироваться массивы с новыми значениями компонентов векторов, как входных, так и эталонных.

Файл сохранен в папке lab2

Не существует жёстких правил выбора архитектуры сети для решения задачи, поэтому её построение основывается в основном на опыте разработчика. Следовательно, рассмотренная ниже конфигурация является лишь вариантом решения данной задачи.

Для решения поставленной задачи сформируем трехслойную сеть обратного распространения, включающую 21 нейрон во входном слое (по числу компонентов входного вектора) с сигмоидальной функцией активации logsig, 15 нейронов во втором слое с функцией активации logsig и 3 нейрона в выходном слое (по числу компонентов выходного вектора) с линейной функцией purelin. При этом в качестве обучающего алгоритма выбран алгоритм Levenberg-Marquardt (trainlm).

Сначала вызывается наш М-файл для передачи значений в Matlab а затем создаем нейронную сеть(1.3)

Рис. 1.3. Создание модели сети

Обучение сети (1.4). Задаем функцию оценки функционирования sse:

В этом случае в качестве оценки (точности) вычисляется сумма квадратичных отклонений выходов сети от эталонов. Задаем критерий окончания обучения – значение отклонения, при котором обучение будет считаться законченным:

Задаем максимальное количество циклов обучения. После того, как будет выполнено это количество циклов, обучение будет завершено:

Теперь можно начинать обучение:

Рис. 1.4. Обучение сети

Рис. 1.5. График зависимости оценки функционирования от номера цикла обучения

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

Для оценки достоверности результатов работы сети можно воспользоваться результатами регрессионного анализа, полученными при сравнении эталонных значений со значениями, полученными на выходе сети, когда на вход поданы входные векторы тестового массива. В среде MATLAB для этого можно воспользоваться функцией postreg.

Сравнение компонентов с эталонными вектороми с соответствующими компонентами выходных векторов сети. Видно, что все точки легли на прямую, что говорит о правильной работе сети на тестовом массиве, следовательно, коэффициент А рассчитывается точно.

Рис. 1.6. Точность сети при расчёте коэффициента A

Рис. 1.7. Точность сети при расчёте коэффициента B

Рис. 1.8. Точность сети при расчёте коэффициента C

Обученная сеть сохранена в папке lab2 файл nn1.mat

Следует пояснить, что при выборе архитектуры сети – слоёв и нейронов в них – огромную роль играют как вид функции (экспоненты, тригонометрические функции), так и знаки при аргументах и степенях. К примеру, если бы наша сеть рассчитывала функцию y = A * exp ( (x-B) / C) – расчёты были бы точны только для коэффициента С, а разброс коэффициентов А и В был бы больше 50%.

Например, пусть С=0.2, A=0.8, S=0.7, тогда

Рис.1.9. Результаты моделирования сети.

Что весьма близко к правильному результату (0.2; 0.8; 0.7).

Вывод: во время выполнения данной лабораторной работы я приобрел навыки создания модели нейронной сети с помощью М-файла в программной среде MatLab.

Соседние файлы в папке lab2