Подборка по базе: 1.1 Основы сетей связи.pdf, Бизнес-аналитика и финансовое моделирование_Задание 5_МЕНбд-1807, Информационное моделирование_Экспорт_коллизии.pdf, Лабораторная №2. Моделирование систем.docx, ПЗ Моделирование экономических процессов 2.docx, Управление рисками, системный анализ и моделирование_ТБмп-2207а_, Тема 3. Моделирование и описание бизнес-процессов.pptx, тест Моделирование и анализ бизнес-процессов.docx, Компьютерное моделирование-экзамен.docx, РОЛЬ СОЦИАЛЬНЫХ СЕТЕЙ В ПРОФЕССИОНАЛЬНОЙ ДЕЯТЕЛЬНОСТИ.pptx
ПРИМЕР 1 Создание и обучение нейронной сети с помощью алгоритма обратного распространения ошибки
Зададим с помощью графика исходную функцию:
% входы НС
P = [0 1 2 3 4 5 6 7 8];
% желаемые реакции НС
T = [0 0.44 0.88 0.11 -0.66 -0.95 -0.45 0.18 0.92];
% изображение аппроксимируемой функции
plot(P, T, ‘o‘);
Используем функцию newff,чтобы создать двухслойную сеть прямого распространения. Пусть сеть имеет входы с интервалом значений от 0 до 8, первый слой с 10 нелинейными сигмоидальными, второй – с одним линейным нейронами. Используем для обучения алгоритм обратного распространения ошибки (backpropagation) Левенберга – Марквардта (
рис. 6).
% создание двухслойной НС прямого распространения с интервалом
% значений входов от 0 до 8, причем первый слой содержит
% 10 нелинейных сигмоид, а второй — один линейный нейрон.
% Для обучения используется алгоритм обратного распространения
% ошибки (backpropagation).
net = newff([0 8], [10 1], {‘tansig’ ‘purelin’},’trainlm’);
% имитация работы необученной НС
yl = sim (net, P);
% изображение результатов работы необученной НС
plot(P, T, ‘o‘, P, yl, ‘x‘) ;
% Обучим сеть на 100 эпохах с целевой ошибкой 0.01:
% установка количества проходов
net.trainParam.epochs = 50;
% установка целевого значения ошибки
net.trainParam.goal = 0.01;
% обучениеНС (рис. 6)
net = train(net, P, T) ;
% имитация работы обученной НС
y2 = sim(net, P);
% изображение результатов работы НС (рис. 7)
plot(P, T, ‘o’, P, yl, ‘x’, P, y2, ‘+’);
Рис. 6. График обучения двухслойного персептрона
Для исследования работы алгоритма обратного распространения ошибки воспользуемся примером, встроенным в Matlab toolbox, набрав команду demo.
В появившемся диалоговом окне необходимо последовательно выбирать пункты меню: Toolboxes->Neural Network->Other Demos->Other Neural Network Design textbook demos->Table of Contents->10-13->Backpropagation Calculation.
Рис. 7. Результат аппроксимации векторов двухслойным персептроном
В примере используется двухслойный персептрон с двумя нелинейными нейронами в первом слое и одним во втором. Действие алгоритма обратного распространения ошибки разбито на следующие шаги: назначение входа и желаемого выхода, прямой проход входного сигнала до выхода, обратное распространение ошибки, изменение весов. Переменные, позволяющие проследить работу алгоритма обратного распространения ошибки, обозначены следующим образом:
Р –входной сигнал;
W1(i) –вектор весов первого слоя, W1(1) –вес связи, передающий входной сигнал на первый нейрон, a W1(2) – на второй;
W2(i) –вектор весов второго слоя, W2(1) –вес связи, передающий входной сигнал с первого нейрона во второй слой, a W2(2) –со второго;
B1(i) –вектор пороговых значений (bias) нейронов первого слоя, i = 1, 2;
В2– пороговое значение (bias) нейрона второго слоя;
N1(i) – вектор выходов первого слоя, i = 1, 2;
N2– выход второго слоя;
A1(i) – вектор выходных сигналов первого слоя после выполнения функции активации (сигмоиды), i = 1, 2;
А2– выход второго слоя после выполнения функции активации (линейной);
lr – коэффициент обучаемости.
Пусть входной сигнал Р = 1,0, а желаемый выход .
Результаты выполнения этапов алгоритма представлены в табл. 1.
Таблица 1
Результаты поэтапного выполнения алгоритма обратного распространения ошибки
Этап | Прямое распространение входного сигнала | Обратное распространение ошибки | Изменение весов |
A1(1), A1(2) | Logsig(W1P+B1) =
= [0,321, 0,368] |
Не выполняется | Не выполняется |
А2 | purelin(W1P+В1)=
= 0,446 |
То же | То же |
е | t — A2 = 1,261 | » | » |
N1(1), N1(2) | Не выполняется | » | |
N2 | То же | » | |
W1(1)
W1(2) |
» | Не выполняется | |
B1(1), B1(2) | » | То же | |
B2 | » | » | |
W2(2) | » | » |
4 КОНТРОЛЬНЫЕ ВОПРОСЫ
- Каким алгоритмом обучают многослойные НС?
- Из каких основных этапов состоит алгоритм обратного распространения ошибки?
- Почему алгоритм обратного распространения ошибки относится к классу алгоритмов градиентного спуска?
- Как влияет функция принадлежности на правило изменения весов в обратном алгоритме распространения ошибки?
- Какая функция в среде MATLAB создает НС прямого распространения?
- Какие функции активации могут быть назначены для нейронов НС прямого распространения?
Лабораторная работа № 3
ИЗУЧЕНИЕ РАДИАЛЬНЫХ БАЗИСНЫХ, ВЕРОЯТНОСТНЫХ НЕЙРОННЫХ СЕТЕЙ, СЕТЕЙ РЕГРЕССИИ
1 ЦЕЛЬ РАБОТЫ
Изучить модель вычислений радиального базисного нейрона, структуру и функции сетей регрессии, вероятностных нейронных сетей.
2 СВЕДЕНИЯ ИЗ ТЕОРИИ
2.1 Радиально-базисные сети. Сети регрессии. Вероятностные НС
Рассмотрим радиальный базисный нейрон с R входами. Структура нейрона представлена на
рис. 8. Радиальный базисный нейрон (РБН) вычисляет расстояние между векторами входов X ивектором весов W,затем умножает его на фиксированный порог b. Функция активации РБН, полученная в среде MATLAB, представлена на рис. 10. Радиальная базисная функция имеет максимум, равный 1, когда ее входы нулевые. Следовательно, радиальный базисный нейрон действует как детектор, который получает на выходе 1, когда вход X идентичен его вектору весов W. Фиксированный порог b даст возможность управлять чувствительностью нейрона. Например, если нейрон имеет порог 0,1, то выход равен 0,5 для любого входного вектора X, находящегося на векторном расстоянии 8,326 (8,326/b) от W.
Рис. 8. Радиальный базисный нейрон
Радиальная базисная нейронная сеть (РБНС) состоит из двух слоев: скрытого радиального базисного слоя из S1нейронов и выходного линейного слоя из S2нейронов. Элементы первого слоя РБНС вычисляют расстояния между входным вектором и векторами весов первого слоя, сформированных из строк матрицы W 2,1. Вектор порогов В и расстояния поэлементно умножаются. Выход первого слоя можно выразить формулой
где A1 – выход первого слоя; функция radbas – радиально-базисная функция; W – матрица весов первого слоя сети; X – входной вектор; В – вектор порогов первого слоя.
Согласно формуле радиальные базисные нейроны с вектором весов, близким к X, сгенерируют значения, близкие к 1. Если нейрон имеет выход 1, то это значение весами второго слоя будет передано на его линейные нейроны. Фактически радиальный базисный нейрон с выходом 1превращает выходы всех остальных нейронов в нули. Тем не менее, типичным является случай, когда несколько нейронов дают на выходах значимый результат, хотя и с разной степенью.
Радиальные базисные нейронные сети обучаются в три этапа. Опишем этапы обучения.
Первый этап – выделение центров (весов). Центры, представленные в РБН-слое, оптимизируются первыми с помощью обучения без учителя. Центры могут быть выделены разными алгоритмами, в частности обучением Кохонена. Алгоритмы должны разместить центры, отражая кластеризацию исходных данных.
Второй этап – назначение отклонений. Отклонения могут быть назначены различными алгоритмами, например алгоритмом «ближайшего соседа».
Третий этап – линейная оптимизация. Можно использовать методы обучения по дельта-правилу, обратному распространению ошибки.
Нейронные сети регрессии (НСР) имеют такой же, как и РБНС, первый слой, но второй слой строится специальным образом. Для аппроксимации функций часто используются обобщенные сети регрессии (generalized regression neuron networks). Второй слой, как и в случае РБНС, выполняет поэлементное произведение строки W1,2и вектора выхода первого слоя a1. Он имеет столько нейронов, сколько существует целевых пар <входной вектор/целевой вектор>. Матрица весов W – это набор целевых строк. Целевое значение – это значение аппроксимируемой функции в обучающей выборке. Предположим, имеется один входной вектор хi,который сгенерирует на выходе первого слоя выход, близкий к 1. В результате выход второго слоя будет близок к tiодному из значений аппроксимируемой функции, использованной при формировании второго слоя.
Сети регрессии иногда называют Байесовскими вероятностными сетями регрессии, или обобщенными НС регрессии. Некоторые реализации сетей регрессии имеют четыре слоя: входной, выходной, слои радиальных центров, элементов регрессии. Радиальный слой представляет собой центры-кластеры известных обучающих данных и содержит такое же количество элементов, как обучающая выборка; РБН обучаются алгоритмом кластеризации. Слой регрессии имеет только на один элемент больше, чем выходной слой, и содержит линейные элементы одного из двух типов. Элемент первого типа вычисляет условную вероятность каждого выходного атрибута, элемент второго типа вычисляет плотность вероятности. Выходной слой выполняет специальные функции деления. Каждый элемент делит выходы, ассоциированные первым типом, с помощью элементов второго типа.
Байесовские вероятностные НС используются только для проблем классификации. Они содержат четыре слоя: входной, выходной, слой РБН и элементов линейной классификации. Слои могут содержать квадратную матрицу потерь, включение которой возможно, только если третий и четвертый слои состоят из одинакового числа элементов. Радиальные базисные нейроны в таких сетях используются для хранения образцов, взятых из обучающей выборки, которая берется полностью. Следовательно, первый скрытый слой содержит такое же количество элементов, что и обучающая выборка. Так как элементы слоя классификации связаны с выходом каждого класса, можно оценить вероятность принадлежности последнему. Если используется матрица потерь, то цена решения минимальна. Такие сети обычно быстро тренируются, но медленно вычисляют из-за большого размера.
Вероятностные нейронные сети (ВНС, probabilistic neuron networks) используются для решения проблемы классификации. Первым слоем в архитектуре ВНС является слой радиальных базисных нейронов, который вычисляет расстояние и вектор индикаторов принадлежности другим входным векторам, используемым при обучении. Второй слой суммирует эти значения для каждого класса входов и формирует выходы сети, как вектор вероятностей. Далее специальная функция активации (compete) определяет максимум вероятностей на выходе второго слоя и устанавливает данный выход в 1, а остальные выходы в 0. Матрица весов первого слоя W1,1 установлена в соответствии с обучающими парами. Блок расчета расстояний получает вектор, элементы которого показывают, насколько близок входной вектор к векторам обучающего множества. Элементы вектора умножаются на вектор порогов и преобразуются радиальной базисной функцией. Входной вектор, близкий к некоторому образцу, устанавливается в 1 в выходном векторе первого слоя. Если входной вектор близок к нескольким образцам отдельного класса, то несколько элементов выходного вектора первого слоя будут иметь значения, близкие к 1.
Веса второго слоя W1,1устанавливаются по матрице T целевых векторов, каждый вектор которой включает значение 1 в строке, связанной с определенным классом входов, и нули в остальных позициях. Произведения Т a1 суммируют элементы выходного вектора первого слоя а1 для каждого из K классов. Затем функция активации второго слоя (compete) установит значение 1 в позицию, соответствующую большему элементу выходного вектора, и 0 во все остальные. Следовательно, сеть классифицирует входные векторы, назначая входу единственный класс на основе максимальной вероятности принадлежности.
2.2 Описание основных функций
Функция newrb создает радиальную базисную сеть и имеет следующий синтаксис:
net = newrb(P, Т, goal, spread).
Радиальные базисные сети используют для аппроксимации функций. Функция newrb конструирует скрытый (первый) слой из радиальных базисных нейронов и использует значение средней квадратичной ошибки (goal). Функция newrb(P, Т, goal, spread) имеет следующие аргументы: Р – матрица Q входных векторов размерности R на Q; Т – матрица Q векторов целевых классов S на Q; goal –средняя квадратичная ошибка, по умолчанию 0,0; spread – разброс радиальной базисной функции, по умолчанию 1,0. Функция создает и возвращает в качестве объекта радиальную базисную сеть. Большое значение разброса приводит к большей гладкости аппроксимации. Слишком большой разброс требует много нейронов, для того чтобы подстроиться под быстро изменяющуюся функцию, слишком малый – для достижения гладкости аппроксимации. Подобрать значение разброса можно с помощью многократных вызовов функции newrb. Создадим в среде MATLABрадиальную базисную сеть:
net = newrbe(P, T, spread).
Метод обратного распространения ошибки
Термин
«обратное распространение» относится
к процессу, с помощью которого могут
быть вычислены производные функционала
ошибки по параметрам сети. Этот процесс
может использоваться в сочетании с
различными стратегиями оптимизации.
Существует много вариантов и самого
алгоритма обратного распространения.
Обратимся к одному из них.
Рассмотрим выражение для градиента
критерия качества по весовым коэффициентам
для выходного слоя M:
(3.9)
где
–
число нейронов в слое;–k-й элемент вектора выхода слояM
для элемента выборки с номеромq.
Правило функционирования слоя M:
(3.10)
Из уравнения (3.8) следует
(3.11)
После подстановки (3.11) в (3.9) имеем:
Если обозначить
(3.12)
то получим
(3.13)
Перейдем к выводу соотношений для
настройки весов
слояM–1
(3.14)
где
Для слоев M–2,M–3,
…,1 вычисление частных производных
критерияJпо элементам
матриц весовых коэффициентов выполняется
аналогично. В итоге получаем следующую
общую формулу:
(3.15)
где r– номер слоя
На рис. 3.6 представлена схема вычислений,
соответствующая выражению (3.15).
Рис. 3.6
На этой схеме символом * обозначена
операция поэлементного умножения
векторов, а символом ** – умножение
вектора наaT;
символ, обозначающий номер элемента
выборки, для краткости опущен.
Характеристика методов обучения
Методы,
используемые при обучении нейронных
сетей, во многом аналогичны методам
определения экстремума функции нескольких
переменных. В свою очередь, последние
делятся на 3 категории – методы нулевого,
первого и второго порядка.
В методах нулевого порядкадля
нахождения экстремума используется
только информация о значениях функции
в заданных точках.
В методах первого порядкаиспользуетсяградиент функционала ошибкипо
настраиваемым параметрам
(3.16)
где
– вектор параметров;
– параметр скорости обучения;
–
градиент функционала, соответствующие
итерации с номеромk.
Вектор в направлении, противоположном
градиенту, указывает направление
кратчайшего спуска по поверхности
функционала ошибки. Если реализуется
движение в этом направлении, то ошибка
будет уменьшаться. Последовательность
таких шагов в конце концов приведет к
значениям настраиваемых параметров,
обеспечивающим минимум функционала.
Определенную трудность здесь вызывает
выбор параметра скорости обучения
.
При большом значении параметрасходимость будет быстрой, но существует
опасность пропустить решение или уйти
в неправильном направлении. Классическим
примером является ситуация, когда
алгоритм очень медленно продвигается
по узкому оврагу с крутыми склонами,
перепрыгивая с одного на другой. Напротив,
при малом шаге, вероятно, будет выбрано
верное направление, однако при этом
потребуется очень много итераций. В
зависимости от принятого алгоритма
параметр скорости обучения может быть
постоянным или переменным. Правильный
выбор этого параметра зависит от
конкретной задачи и обычно осуществляется
опытным путем; в случае переменного
параметра его значение уменьшается по
мере приближения к минимуму функционала.
В алгоритмах сопряженного градиента[12] поиск минимума выполняется вдоль
сопряженных направлений, что
обеспечивает обычно более быструю
сходимость, чем
при наискорейшем
спуске. Все алгоритмы сопряженных
градиентов на первой итерации начинают
движение в направлении антиградиента
(3.17)
Тогда
направление следующего движения
определяется так, чтобы оно было сопряжено
с предыдущим.
Соответствующее выражение для нового
направления движения является комбинацией
нового направления наискорейшего спуска
и предыдущего направления:
(3.18)
Здесь
– направление движения,
–
градиент функционала ошибки,– коэффициент соответствуют итерации
с номеромk. Когда направление спуска
определено,
то новое значение вектора
настраиваемых параметроввычисляется по формуле
. (3.19)
Методы второго порядка требуют
знания вторых производных функционала
ошибки.
К методам второго порядка
относится метод Ньютона. Основной шаг
метода Ньютона определяется по формуле
, (3.20)
где
– вектор значений параметров наk-й
итерации; H– матрица вторых частных
производных целевой функции, или матрица
Гессе;– вектор градиента наk-й итерации.
Во многих случаях метод Ньютона сходится
быстрее, чем методы сопряженного
градиента, но требует больших затрат
из-за вычисления гессиана. Для того
чтобы избежать вычисления матрицы
Гессе, предлагаются различные способы
ее замены приближенными выражениями,
что порождает так называемыеквазиньютоновыалгоритмы(алгоритм метода секущих
плоскостей OSS [1], алгоритм LM Левенберга
– Марквардта [17]).
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Библиографическое описание:
Брейдо, И. В. Алгоритм создания модели краткосрочного прогнозирования энергопотребления на основе нейронной сети в Matlab / И. В. Брейдо, Ю. Ф. Булатбаева, Г. Д. Оразгалеева. — Текст : непосредственный // Актуальные вопросы технических наук : материалы VI Междунар. науч. конф. (г. Краснодар, апрель 2020 г.). — Краснодар : Новация, 2020. — С. 1-6. — URL: https://moluch.ru/conf/tech/archive/367/15614/ (дата обращения: 09.06.2023).
В статье авторы поэтапно создают прогнозную модель и анализируют ее точность и адекватность.
Ключевые слова: прогнозирование, нейронные сети, рынок электроэнергии, планирование энергоресурсов, моделирование.
В основе рационального ведения энергетического хозяйства лежит планирование энергоресурсов. Грамотное планирование энергопотребления отдельных предприятий позволяет отследить перспективу развития топливно-энергетического комплекса в масштабах государства.
С целью стимулирования потребителей рынка электроэнергии Правительство Республики Казахстан запланировало запуск балансирующего рынка электрической энергии (далее БРЭ). Его суть заключена в механизме ценорегулирования: потребитель ежедневно заявляет плановое почасовое потребление, а системный оператор отслеживает отклонения фактического потребления от заявленного. Чем больше отклонение, тем дороже обойдется потребителю перерасходованная электроэнергия, и, наоборот, чем точнее потребитель был в заявке по плановому потреблению, тем меньше ему придется заплатить. В этой связи, потребителям электроэнергии необходимо выбрать методику прогнозирования энергопотребления на своих предприятиях, обучить сотрудников и внедрить в производство. Особенно проблема коснется энергоемкие предприятия металлургии, машиностроения, нефтехимии.
Одним из зарекомендовавших себя методов прогнозирования на сегодняшний день являются экспертные системы на базе нейронных сетей по алгоритму обратного распространения ошибки (back-propagation algorithm). Рассмотрим их структуру на рисунке 1.
Рис. 1. Структура многослойного персептрона с двумя скрытыми слоями [1, с. 223]
Данный алгоритм является частным случаем алгоритма минимизации среднеквадратичной ошибки. Нейронные сети обучаются с помощью уточнения весовых коэффициентов своих связей слой за слоем: на входной слой (input layer) подаются исходные данные, далее происходят вычисления в одном из нескольких скрытых слоев (hidden layer) и на выходном слое (output layer) получаются прогнозные данные (рисунок 1). Этот процесс управляется ошибкой — разностью между правильным ответом, предоставляемым тренировочными данными, и фактическим выходным значением [2]. Сеть с подобной структурой получила название многослойный персептрон (multilayer perceptron).
Построение прогноза проводится в четыре этапа.
Этап 1 — Загрузка исходных данных. В качестве исходных данных было взято почасовое энергопотребление за два рабочих дня 30, 31 декабря 2019 года [3]. В рабочей области вызывается окно создания нейронной сети командой nntool. Рассмотрим окно создания нейронной сети на рисунке 2.
Рис. 2. Окно создания нейронной сети
Для работы на БРЭ необходимы краткосрочные прогнозы, интервал дискретизации равен одному часу. Для обучения достаточны данные по почасовому потреблению за двое предыдущих суток.
Этап 2. Настройка и выбор параметров нейронной сети. Рассмотрим окно настройки сети на рисунке 3.
Рис. 3. Окно создания и настройки нейронной сети
Нейроны активируются через сигмоидальную функцию, формула которой равна:
Этап 3. Обучение и тренировка нейронной сети. Обучение проходит по алгоритму Левенберга — Марквардта, изображенному на рисунке 4.
Рис. 4. Окно тренировки сети
Этап 3. Получение результатов. После тренировки сети получили следующие результаты на рисунке 5.
Рис. 5. Профили фактического и заявленного энергопотребления
Чтобы визуально интерпретировать результаты, необходимо построить графики прогнозных и фактических величин, ошибка равна 4,55 %.
Таким образом, однофакторная модель на основе нейронная сети по алгоритму Левенберга — Марквадта и механизму обратного распространения ошибки дала точность 95,45 %.
Литература:
- Хайкин. С. Нейронные сети. Полный курс. — М.: Вильямс, 2006.
- Рашид Т. Создаем нейронную сеть. — СПб.: Альфа-книга, 2017.
- Соловьева И. А., Дзюба А. П. Прогнозирование электропотребления с учетом факторов технологической и рыночной среды. –– Екатеринбург: Научный диалог, 2013.
Основные термины (генерируются автоматически): нейронная сеть, окно создания, данные, многослойный персептрон, обратное распространение ошибки, планирование энергоресурсов, рисунок, этап.
Похожие статьи
Реализация многослойного персептрона и сети адаптивного…
Обучение многослойного персептрона методом обратного распространения ошибки предполагает два прохода по всем слоям сети: прямой и обратный.
Для обучения нейронной сети c помощью персептрона выбираются четыре образца из предлагаемых изображений.
Нейросетевые технологии и их применение при прогнозировании…
Обучение нейронной сети по методу обратного распространения ошибки. В результате эксперимента было выявлено, что наилучший
нейронная сеть, входной слой, сумма активов, многослойный персептрон, коэффициент корреляции, обратное распространение, скрытый…
Совершенствование построения теоретических моделей…
Отличительными признаками многослойного персептрона нейронной сети модели
Основные термины (генерируются автоматически): нейронная сеть, сеть, обратное
Для алгоритма обратного распространения ошибки рекомендуется один скрытый слой, большее…
Использование искусственных нейронных сетей для…
многослойный персептрон, обучение сети, обратное распространение ошибки, сеть, входной вектор, вход сети, адаптивный резонанс, входной образ
Применение многослойных нейронных сетей в выявлении… нейронная сеть, обратное распространение ошибки, сеть…
К задаче прогнозирования энергопотребления с помощью…
Обучение нейронной сети по методу обратного распространения ошибки.
Прогнозирование с помощью нейронной сети методом обратного распространения ошибки происходило в несколько этапов: Этап 1. Инициализация и исходные данные.
Нейронная сеть, распознающая рукописные цифры на языке…
Чтобы обучить нейронную сеть используются два файла из базы данных MNIST, которая состоит из заранее
Они используются для расчета распространения сигналов в прямом направлении, а также
Третья нейронная сеть основана на Многослойном перцептроне…
Применение технологий нейронных сетей для обработки данных…
Для обучения нейронной сети используется алгоритм обратного распространения ошибки
Для модуля реализована панель создания нейронных сетей в разделе администрирования.
Также разработан интерфейс создания нейронной сети, изображенный на рисунке 2
О применении искусственной нейронной сети в системах…
Реализация многослойного персептрона и сети адаптивного… Обучение многослойного персептрона методом обратного распространения ошибки.
Ключевые слова: нейронные сети, персептрон, нейрон. Искусственные нейронные сети создавались путём имитации на…
Некоторые аспекты теории нейронных систем | Статья в журнале…
На рисунке 2 представлена многослойная нейронная сеть эталонного вида, то есть со всеми
Нейронная сеть — это вычислительная структура, которая состоит из искусственных
Обучение многослойного персептрона методом обратного распространения ошибки…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
function [f]=backprog(L, n, m, x, wij, wjk, tj, tk, l, a) c = 0; yj = zeros(L, m); yk = zeros(L,1); ej = zeros(L,1); ey = zeros(L,1); while (c < 10000) c = c + 1; for k=1:L%по всем образам for j=1:n %n-кол-во нейронов скрытого слоя for i=1:m %m-кол-во вх. нейронов yj(k,j)=yj(k,j)+wij(i,j)*x(k,i);%вычислили значения для j-нейроного скрытого слоя end; yj(k,j)=yj(k,j)-tj(1,j);%вычислили разницу между значением и эталоном yk(k,1)=yk(k,1)+wjk(j,1)*yj(k,j);%вычислили выход end; yk(k,1)=logsig1(yk(k,1)-tk);%вычислили разницу между значением выхода и эталоном ey(k,1)=yk(k,1) - l(k,1);%ошибка для k-j for j=1:n ej(k,1)=ej(k,1) + ej(k,1)*logsig1(yj(k,j))*(1-logsig1(yj(k,j)))*wjk(j,1);%ошибка для i-j end; end; for k=1:L tk=0.9*tk+a*ey(k,1)*logsig1(yj(k,j))*(1-logsig1(yj(k,j))); for j=1:n wjk(j,1)=0.9*wjk(j,1)-a*ey(k,1)*logsig1(yj(k,j))*(1-logsig1(yj(k,j)))*yj(k,j); tj(1,j)=0.9*tj(1,j)+a*ey(k,1)*logsig1(yj(k,j))*(1-logsig1(yj(k,j))); for i=1:m wij(i,j)=0.9*wij(i,j)-a*ej(k,1)*logsig1(yj(k,j))*(1-logsig1(yj(k,j)))*x(k,i); end end end E=0; for k=1:L E=E+(logsig1(yk(k,1))-l(k,1))*(logsig1(yk(k,1))-l(k,1)); end E = 1/2 * E; end; f = yk; E hold on; plot(yk(:, 1), 'blue'); plot(l(:, 1),'k--'); legend('Выходные значения', 'Эталонные значения'); |
- Искусственная нейронная сеть
- 1. Основная теория
-
- 1. Основные математические основы сети БП
-
- 2. Панель инструментов
- 1. Функция создания сети БП
- 1. Функция newcf
- 2. Функция newfftd
- 2. Функция возбуждения нейрона
- 1. Функции журнала
- 2. Функция журнала
- 3. Функция тансиг
- 4. Функция dtansig
- 5. Функция purelin
- 6. Функция дпурелин
- 3. Функция обучения сети BP
- 1. Функция Learning
- 2. Функция learningngdm
- 4. Функция обучения сети BP
- 1. Функция trainbfg
- 2. Функция traingd
- 3. Функция traingdm
- 5. Производительность
- 1. Функция мсе
- 2. Функция мсерег
- 1. Функция создания сети БП
- 3. Меры предосторожности при формировании нейронной сети
- 1. Количество нейронных узлов
- 2. Предварительная обработка данных и последующая обработка
- 1. Функция premnmx
- 4. Примеры
- Описание проблемы
- 2. Процесс решения панели инструментов
- 1. Ввод необработанных данных
- 2. Нормализация данных
- 3. Сетевое обучение
- 4. Имитация исходных данных
- 5. Сравните результаты моделирования исходных данных с известными образцами.
- 6. Имитация новых данных
- 7. Комплексные процедуры
- 3. Процесс решения исходной программы
- 1. Основная теория
Искусственная нейронная сеть
Искусственные нейронные сети в основном используются для моделирования данных, прогнозирования, распознавания образов и оптимизации функций.
1. Основная теория
ANN (искусственная нейтральная сеть, искусственная нейронная сеть) представляет собой сложную сетевую систему, которая состоит из большого числа простых базовых элементов-нейронов, соединенных друг с другом, путем имитации обработки информации нервом мозга человека, параллельной обработки информации и нелинейного преобразования.
1. Основные математические основы сети БП
BP (обратное распространение) — это многослойная нейронная сеть с прямой связью
Как показано на рисунке, сеть BP представляет собой нейронную сеть с тремя или более слоями нейронов, включая входной слой, промежуточный слой (скрытый слой) и выходной слой. Верхний и нижний уровни полностью связаны, и между нейронами в одном слое нет никакой связи. Входные нейроны и нейроны скрытого слоя являются весами сети, и их значение — сила связи между этими двумя нейронами. Любой нейрон в скрытом слое или выходном слое объединяет информацию от всех нейронов в предыдущем слое.Как правило, к интегрированной информации добавляется порог, главным образом потому, что нейроны в моделируемой биологии должны достигать определенного уровня. Порог будет запускать принцип, а затем использовать интегрированную информацию в качестве входа этого слоя нейронов. Когда пара обучающих выборок предоставляется входному нейрону, значение активации нейрона (выходное значение нейрона) распространяется от входного слоя через скрытые слои к выходному слою, и каждый нейрон в выходном слое получает входной отклик сети Затем, в соответствии с направлением уменьшения ошибки между выходом сети и фактическими выходными выборками, выходной уровень переворачивает скрытые слои и возвращается к входному слою, тем самым постепенно восстанавливая веса соединений. Такой алгоритм называется алгоритмом обратного распространения ошибок. Алгоритм БП. Поскольку эта коррекция обратного распространения ошибки повторяется, уровень точности ответа сети на входной шаблон также увеличивается
2. Панель инструментов
1. Функция создания сети БП
Возможные переменные и их значения:
переменная | смысл |
---|---|
PR | R X 2 матрица, состоящая из максимального и минимального значений каждого набора входных элементов |
Si | первый i Длина слоя, всегоN слой |
TFi | первый i Функция возбуждения слоя, по умолчанию «tansig» |
BTF | Функция обучения по сети, по умолчанию «trainlm» |
BLF | Алгоритм обучения для весов и пороговых значений, по умолчанию «Learningngdm» |
PF | Функция производительности сети, по умолчанию «mse» |
1. Функция newcf
Эта функция используется для создания сети BP
net = newff
net = newff(PR,[S1 S2...SN],{TF1 TF2...TFN},BTF,BLF,PF)
Среди них net = newff используется для создания сети BP в диалоговом окне.
2. Функция newfftd
Эта функция используется для создания прямой сети с задержкой на вход
net = nefftd
net = nefftd(PR,[S1 S2...SN],{TF1 TF2...TFN},BTF,BLF,PF)
Среди них net = newfftd используется для создания сети BP в диалоговом окне.
2. Функция возбуждения нейрона
Функция возбуждения должна быть непрерывно дифференцируемой
1. Функции журнала
logsig — логарифмическая функция типа S
A = logsig(N)
info = logsig(code)
Среди них
N
есть
Q
более
S
Вектор столбца размерного ввода; A — возвращаемое значение функции, расположенное в интервале (0,1), информация возвращает различную информацию в соответствии с различными значениями кода, как показано в таблице.
кодовое значение | Информация возвращена |
---|---|
‘deriv’ | Имя дифференциальной функции |
‘name’ | Полное имя функции |
‘output’ | Диапазон выхода |
‘active’ | Допустимый интервал ввода |
Алгоритм, используемый этой функцией:
l
o
g
s
i
g
(
n
)
=
1
1
+
e
−
n
2. Функция журнала
dlogsig является производной функцией logsig
dA_dN = dlogsig(N,A)
Среди них
N
есть
S
×
Q
Размерность сетевого входа, А есть
S
×
Q
Размерный сетевой выход, dA_dN — возвращаемое значение функции, а производная от входа — выход
Алгоритм, используемый этой функцией:
d
=
a
(
1
−
a
)
3. Функция тансиг
тансиг — функция возбуждения гиперболического касательного S-типа
A = tansig(N)
info = tansig(code)
Где N
Q
более
S
Вектор столбца размерного ввода, A — это возвращаемое значение функции, расположенное в интервале (-1,1), информация возвращает различную информацию в соответствии с различными значениями кода, так же, как функция logsig
Алгоритм, используемый этой функцией:
n
=
2
[
1
+
e
−
2
n
]
−
1
4. Функция dtansig
dtansig — это производная функция функции tansig
dA_dN = dtansig(N,A)
Среди них
N
есть
S
×
Q
Размерность сетевого входа, А есть
S
×
Q
Размерный сетевой выход, dA_dN — возвращаемое значение функции, а производная от входа — выход
Алгоритм, используемый этой функцией:
d
=
1
−
a
2
5. Функция purelin
purelin — функция линейного возбуждения
A = purelin(N)
info = purelin(code)
Среди них
N
есть
Q
более
S
Вектор столбца размерного ввода; A — возвращаемое значение функции, A = N, а информация возвращает различную информацию в соответствии со значением кода, которое совпадает с logsig.
Алгоритм, используемый этой функцией:
p
u
r
e
l
i
n
(
n
)
=
n
6. Функция дпурелин
dpurelin — производная функция от функции purelin
dA_dN = dpurelin(N,A)
Среди них
N
есть
S
×
Q
Размерность сетевого входа, А есть
S
×
Q
Размерный сетевой выход, dA_dN — возвращаемое значение функции, а производная от входа — выход
Алгоритм, используемый этой функцией:
D
(
i
,
q
)
=
1
3. Функция обучения сети BP
1. Функция Learning
Функция learnngd — это функция обучения веса / порога градиентного снижения, которая вычисляет скорость изменения веса или порога на основе ввода и ошибки нейрона, а также скорость обучения веса и порога.
[dW,LS] = learngd(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
[db,LS] = learngd(b,ones(1,Q),Z,N,A,T,E,gW,gA,D,LP,LS)
info = learngd(code)
Где W
S
×
R
Размерная весовая матрица; b — S-мерный пороговый вектор; P —
Q
группа
R
Размерный входной вектор, единицы (1, Q) — это Q-мерный входной вектор, Z — S-мерный взвешенный входной вектор Q-группы, N — S-мерный входной вектор Q-группы, A — S-мерный выходной вектор Q-группы. ; T — целевой вектор S-мерного уровня для группы Q; E — вектор ошибок S-размерного уровня для группы Q; gW связан с производительностью
S
×
R
Размерный градиент; gA зависит от производительности
S
×
R
Размер выходного градиента; D есть
S
×
S
Размерная нейронная матрица расстояний; LP — параметр обучения, и скорость обучения может быть установлена с помощью этого параметра, формат установки — LP.lr = 0,001; LS — состояние обучения; в начальном состоянии он пуст; dW —
S
×
R
Размерная матрица весовых коэффициентов или пороговых значений изменения; db — S-мерный вектор скорости изменения пороговых значений; ls — новое состояние обучения; learnng (код) возвращает различную информацию о функции в соответствии с различными кодами следующим образом
кодовое значение | Информация возвращена |
---|---|
pnames | Вернуться к заданным параметрам обучения |
pdefaults | Возвращает параметры обучения по умолчанию |
needg | Если функция использует gW или gA, она возвращает 1 |
2. Функция learningngdm
Функция learnngdm — это функция обучения импульсу градиентного спуска, которая использует вход и ошибку нейрона, скорость обучения веса или порога и постоянную импульса для расчета скорости изменения веса или порога
[dW,LS] = learngdm(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
[db,LS] = learngdm(b,ones(1,Q),Z,N,A,T,E,gW,gA,D,LP,LS)
info = learngdm(code)
Значение каждого параметра такое же, как learnngdm, а постоянная импульса mc задается параметром обучения LP, формат LP.mc = 0,8
4. Функция обучения сети BP
1. Функция trainbfg
Функция trainbfg является функцией квазиньютоновского алгоритма BP BFGS. В дополнение к сети BP эта функция может также обучать любую форму нейронной сети, требуя, чтобы ее функция возбуждения имела производные по весам и входам
[net,TR,Ac,El] = trainbfg(NET,Pd,Tl,Ai,Q,TS,VV,TV)
info = trainbfg(code)
Среди них NET — это нейронная сеть, которую необходимо обучить; Pd — входной вектор с задержкой; Tl — иерархический целевой вектор; Ai — начальное условие задержки на входе; Q — пакет; TS — шаг по времени; VV используется для определения структуры вектора или Пусто; TV используется для проверки структуры вектора или пусто; net — нейронная сеть после тренировки; TR — соответствующая запись информации для каждого шага обучения, включая: TR.epoch-time, TR.perf-training, TR vperf — подтверждение производительности, TR.tperf — тестирование производительности; Ac — выход уровня агрегации в обучении предыдущего шага; El — ошибка уровня в обучении предыдущего шага; info = trainbfg (code) возвращает различную информацию в соответствии с различными значениями кода Конкретно:
кодовое значение | Информация возвращена |
---|---|
pnames | Вернуться к заданным параметрам обучения |
pdefaults | Возвращает параметры обучения по умолчанию |
При использовании этой функции для обучения сети BP, Matlab уже установил по умолчанию некоторые параметры обучения, как показано в таблице:
Имя параметра | Значение по умолчанию | собственности |
---|---|---|
net.trainParam.epochs | 100 | Количество тренировок, количество тренировок, установленных вручную, не может превышать 100 |
net.trainParam.show | 25 | Количество тренировочных шагов между дисплеями |
net.trainParam.goal | 0 | Тренировочная цель |
net.trainParam.time | inf | Время обучения, inf означает неограниченное время обучения |
net.trainParam.min_grad | 1e-6 | Минимальный градиент производительности |
net.trainParam.max_fail | 5 | Максимальное количество ошибок подтверждения |
net.trainParam.searchFcn | ‘srchcha’ | Используется линейный путь поиска |
2. Функция traingd
Функция traingd является обучающей функцией алгоритма градиентного спуска BP
[net,TR,Ac,El] = traingd(NET,Pd,Tl,Ai,Q,TS,VV,TV)
info = traingd(code)
Значение, формат настройки и диапазон использования каждого параметра вышеупомянутой программы совпадают с функцией trainbfg
3. Функция traingdm
Функция traingdm является обучающей функцией алгоритма BP градиентного спуска
[net,TR,Ac,El] = traingdm(NET,Pd,Tl,Ai,Q,TS,VV,TV)
info = traingdm(code)
Значение, формат настройки и диапазон использования каждого параметра вышеупомянутой программы совпадают с функцией trainbfg
5. Производительность
1. Функция мсе
Функция mse является среднеквадратичной погрешностью
perf = mse(e,x,pp)
perf = mse(e,net,pp)
info = mse(code)
Где e — матрица векторов ошибок, x — все весовые и пороговые векторы, которые можно игнорировать, pp — параметр производительности, который можно игнорировать; net — это нейронная сеть, которая должна быть оценена; perf — это возвращаемое значение функции, которая является средней абсолютной ошибкой; информация Чтобы вернуть различную информацию в соответствии с разными значениями кода, в следующей таблице
кодовое значение | Информация возвращена |
---|---|
deriv | Возвращает имя производной функции |
name | Возвращаем полное имя функции |
pnames | Возвращает название функции обучения |
pdefaults | Возвращает функцию обучения по умолчанию |
2. Функция мсерег
perf = msereg(e,x,pp)
perf = msereg(e,net)
info = msereg(code)
Значение каждого параметра в вышеприведенной программе совпадает со значением функции mse.
Функция msereg заключается в добавлении среднеквадратичной ошибки весов и порогов сети на основе функции mse, цель состоит в том, чтобы заставить сеть получать меньшие веса и пороги, тем самым заставляя отклик сети становиться более плавным
3. Меры предосторожности при формировании нейронной сети
1. Количество нейронных узлов
Количество входных и выходных узлов сети определяется размером фактической проблемы и не имеет никакого отношения к производительности сети. Расчет числа узлов L скрытого слоя очень важен и обычно может быть определен с использованием одной из следующих двух эмпирических формул
l
=
m
+
n
+
a
или
l
=
0.43
m
n
+
0.12
n
2
+
2.54
m
+
0.77
n
+
0.35
+
0.51
Среди них
m
、
n
Соответственно, количество входных узлов и количество выходных узлов;
a
Постоянная между 1 ~ 10
Количество скрытых узлов может быть получено из начального значения в соответствии с двумя вышеупомянутыми формулами, и затем число нейронов может быть окончательно определено методом ступенчатого роста или пошагового сокращения. Постепенный рост начинается с более простой сети: если результат обучения не соответствует требованиям, постепенно увеличивайте количество нейронов скрытого слоя до тех пор, пока он не станет подходящим, постепенное сокращение начинается с более сложной сети и постепенно удаляет нейроны скрытого слоя
2. Предварительная обработка данных и последующая обработка
Методы предварительной обработки, предоставляемые в MATLAB, следующие:
- Нормализация: измените каждый набор данных на число от -1 до 1, задействованы следующие функции: mapminmax, postmnmx, tramnmx
- Стандартизированная обработка: каждый набор данных преобразуется в набор данных со средним значением 0 и дисперсией 1. Используются следующие функции: prestd, poststd, trastd
- Анализ основных компонентов: ортогональная обработка может уменьшить размерность входных данных. Используются такие функции, как prepca и trapca
- Регрессионный анализ и корреляционный анализ: включенные функции включают postrg и т. Д.
1. Функция premnmx
Функция нормализации premnmx
[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t)
[pn,minp,maxp] = premnmx(p)
Где р
R
×
Q
Размерная матрица ввода; pn стандартизирован
R
×
Q
Размер входной матрицы; minp
R
×
1
Измерение содержит вектор минимального значения каждого компонента p; maxp равен
R
×
1
Размерность содержит вектор максимального значения каждого компонента p; tn нормируется
S
×
Q
Размерная целевая матрица; мята
S
×
1
Измерение содержит каждый компонент t; maxt является
S
×
1
Размер содержит вектор максимального значения каждого компонента t
Алгоритм, используемый этой функцией:
p
n
=
2
p
−
m
i
n
p
m
a
x
p
−
m
i
n
p
−
1
4. Примеры
Описание проблемы
Дорожное движение в основном включает автомобильные пассажирские перевозки и автомобильные грузовые перевозки. Согласно исследованиям, объем дорожного движения в определенном районе в основном связан с количеством людей в этом районе, количеством автомобилей и площадью дорог.
Согласно данным соответствующих департаментов, число людей в регионе в 2010 и 2011 годах составило 733 900 и 755 500 человек соответственно, количество автомобилей составило 3,9635 и 40 975 000 человек соответственно, а площадь дороги составит 0,9880 и 1,0268 миллиона квадратных километров соответственно.
Пожалуйста, используйте сеть BP, чтобы прогнозировать автомобильные пассажирские и автомобильные перевозки в регионе в 2010 и 2011 годах.
лет | Численность населения / 10000 человек | Количество автомобилей / 10000 | Площадь шоссе / десять тысяч квадратных километров | Пассажиры на 10 тысяч человек | Объем автоперевозок / 10000 тонн |
---|---|---|---|---|---|
1990 | 55 | 6 | 09 | 5126 | 1237 |
1991 | 22.44 | 0.75 | 0.11 | 6217 | 1379 |
1992 | 25.37 | 0.85 | 0.11 | 7730 | 1385 |
1993 | 27.13 | 0.90 | 0.14 | 9145 | 1399 |
1994 | 29.45 | 1.05 | 0.20 | 10460 | 1663 |
1995 | 30.1 | 1.35 | 0.23 | 11387 | 1714 |
1996 | 30.96 | 1.45 | 0.23 | 12353 | 1834 |
1997 | 34.06 | 1.60 | 0.32 | 15750 | 4322 |
1998 | 36.42 | 1.70 | 0.32 | 18304 | 8132 |
1999 | 38.09 | 1.85 | 0.34 | 19836 | 8936 |
2000 | 39.13 | 2.15 | 0.36 | 21024 | 11099 |
2001 | 39.99 | 2.20 | 0.36 | 19490 | 11203 |
2002 | 41.93 | 2.25 | 0.38 | 20433 | 10524 |
2003 | 44.59 | 2.35 | 0.49 | 22598 | 11115 |
2004 | 47.30 | 2.50 | 0.56 | 25107 | 13320 |
2005 | 52.89 | 2.60 | 0.59 | 33442 | 16762 |
2006 | 55.73 | 2.70 | 0.59 | 36836 | 18673 |
2007 | 56.76 | 2.85 | 0.67 | 40548 | 20724 |
2008 | 59.17 | 2.95 | 0.69 | 42927 | 20803 |
2009 | 60.63 | 3.10 | 0.79 | 43462 | 21804 |
2. Процесс решения панели инструментов
1. Ввод необработанных данных
clc
% Исходные данные
% Количество (единица измерения: десять тысяч)
sqrs=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 ...
41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63];
% Автомобили (Единица: 10000 единиц)
sqjdcs=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6...
2.7 2.85 2.95 3.1];
% Площадь шоссе (единица измерения: десять тысяч квадратных километров)
sqglmj=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 ...
0.56 0.59 0.59 0.67 0.69 0.79];
% Пассажирские перевозки по шоссе (ед .: десять тысяч человек)
glkyl=[5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 ...
22598 25107 33442 36836 40548 42927 43462];
% Объем грузовых автомобильных дорог (единица измерения: 10 000 тонн)
glhyl=[1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 ...
13320 16762 18673 20724 20803 21804];
p=[sqrs;sqjdcs;sqglmj]; % Матрицы входных данных
t=[glkyl;glhyl]; % Целевая матрица данных
2. Нормализация данных
% Используйте функцию premnmx для нормализации данных
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); % Нормализовать матрицу ввода p и матрицу вывода t
dx=[-1,1;-1,1;-1,1]; % Минимальное значение после нормализации равно -1, а максимальное значение равно 1
3. Сетевое обучение
Обучение сети% BP
net=newff(dx,[3,7,2],{'tansig','tansig','purelin'},'traingdx'); Построить модель и тренироваться с градиентным спуском.
net.trainParam.show=1000; % 1000 показывает результат один раз
net.trainParam.Lr=0.05; % Скорость обучения составляет 0,05
net.trainParam.epochs=50000; % Максимальный тренировочный цикл 50000 раз
net.trainParam.goal=0.65*10^(-3); % Среднеквадратической ошибки
net=train(net,pn,tn); % Начало обучения, где pn и tn - входные и выходные выборки соответственно
4. Имитация исходных данных
% Использование необработанных данных для моделирования сети BP
an=sim(net,pn); % Использовать обученную модель для симуляции
a=postmnmx(an,mint,maxt); % Восстановить моделируемые данные до первоначального порядка;
5. Сравните результаты моделирования исходных данных с известными образцами.
% В этом примере используются обучающие данные для тестирования из-за ограниченного размера выборки, как правило, должны быть проверены с использованием свежих данных
x=1990:2009;
newk=a(1,:);
newh=a(2,:);
figure (2);
subplot(2,1,1);plot(x,newk,'r-o',x,glkyl,'b--+') % Окрашенная схема сравнения стоимости пассажирских перевозок по шоссе;
legend(«Сеть вывода пассажиропотока»,«Фактический пассажиропоток»);
xlabel(«Год»);ylabel(«Пассажирский объем / 10000 человек»);
subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+') % Нарисуйте сравнительную диаграмму объема автомобильных перевозок;
legend(«Объем выходного груза сети»,«Фактический объем фрахта»);
xlabel(«Год»);ylabel(«Объем груза / 10000 тонн»);
6. Имитация новых данных
% Используйте обученную сеть, чтобы делать прогнозы
% При использовании обученной сети для прогнозирования новых данных pnew, они также должны обрабатываться соответствующим образом:
pnew=[73.39 75.55
3.9635 4.0975
0.9880 1.0268]; % Соответствующие данные за 2010 и 2011 годы;
pnewn=tramnmx(pnew,minp,maxp); % Используйте параметры нормализации исходных входных данных для нормализации новых данных;
anewn=sim(net,pnewn); % Использовать нормализованные данные для моделирования;
anew=postmnmx(anewn,mint,maxt) % Восстановить смоделированные данные до первоначального порядка;
7. Комплексные процедуры
clc
% Исходные данные
% Количество (единица измерения: десять тысяч)
sqrs=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 ...
41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63];
% Автомобили (Единица: 10000 единиц)
sqjdcs=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6...
2.7 2.85 2.95 3.1];
% Площадь шоссе (единица измерения: десять тысяч квадратных километров)
sqglmj=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 ...
0.56 0.59 0.59 0.67 0.69 0.79];
% Пассажирские перевозки по шоссе (ед .: десять тысяч человек)
glkyl=[5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 ...
22598 25107 33442 36836 40548 42927 43462];
% Объем грузовых автомобильных дорог (единица измерения: 10 000 тонн)
glhyl=[1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 ...
13320 16762 18673 20724 20803 21804];
p=[sqrs;sqjdcs;sqglmj]; % Матрицы входных данных
t=[glkyl;glhyl]; % Целевая матрица данных
% Используйте функцию premnmx для нормализации данных
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); % Нормализовать матрицу ввода p и матрицу вывода t
dx=[-1,1;-1,1;-1,1]; % Минимальное значение после нормализации равно -1, а максимальное значение равно 1
Обучение сети% BP
net=newff(dx,[3,7,2],{'tansig','tansig','purelin'},'traingdx'); Построить модель и тренироваться с градиентным спуском.
net.trainParam.show=1000; % 1000 показывает результат один раз
net.trainParam.Lr=0.05; % Скорость обучения составляет 0,05
net.trainParam.epochs=50000; % Максимальный тренировочный цикл 50000 раз
net.trainParam.goal=0.65*10^(-3); % Среднеквадратической ошибки
net=train(net,pn,tn); % Начало обучения, где pn и tn - входные и выходные выборки соответственно
% Использование необработанных данных для моделирования сети BP
an=sim(net,pn); % Использовать обученную модель для симуляции
a=postmnmx(an,mint,maxt); % Восстановить смоделированные данные до первоначального порядка;
% В этом примере используются обучающие данные для тестирования из-за ограниченного размера выборки, как правило, должны быть проверены с использованием свежих данных
x=1990:2009;
newk=a(1,:);
newh=a(2,:);
figure (2);
subplot(2,1,1);plot(x,newk,'r-o',x,glkyl,'b--+') % Окрашенная схема сравнения стоимости пассажирских перевозок по шоссе;
legend(«Сеть вывода пассажиропотока»,«Фактический пассажиропоток»);
xlabel(«Год»);ylabel(«Пассажирский объем / 10000 человек»);
subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+') % Нарисуйте сравнительную диаграмму объема автомобильных перевозок;
legend(«Объем выходного груза сети»,«Фактический объем фрахта»);
xlabel(«Год»);ylabel(«Объем груза / 10000 тонн»);
% Используйте обученную сеть, чтобы делать прогнозы
% При использовании обученной сети для прогнозирования новых данных pnew, они также должны обрабатываться соответствующим образом:
pnew=[73.39 75.55
3.9635 4.0975
0.9880 1.0268]; % Соответствующие данные за 2010 и 2011 годы;
pnewn=tramnmx(pnew,minp,maxp); % Используйте параметры нормализации исходных входных данных для нормализации новых данных;
anewn=sim(net,pnewn); % Использовать нормализованные данные для моделирования;
anew=postmnmx(anewn,mint,maxt) % Восстановить смоделированные данные до первоначального порядка;
3. Процесс решения исходной программы
clc % Очистить экран
clear all; % Очистки памяти для ускорения расчетов
close all; % Закрыть все текущие изображения фигур
SamNum=20; % Количество входных отсчетов составляет 20
TestSamNum=20; % Количество тестируемых образцов также составляет 20
ForcastSamNum=2; % Прогнозируемого размера выборки составляет 2
HiddenUnitNum=8; % Количество скрытых узлов в среднем слое равно 8, что на 1 больше, чем у программы панели инструментов
InDim=3; % Размер сетевого входа равен 3
OutDim=2; % Выходной размер сети равен 2
% Исходные данные
% Количество (единица измерения: десять тысяч)
sqrs=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 ...
41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63];
% Автомобили (Единица: 10000 единиц)
sqjdcs=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6...
2.7 2.85 2.95 3.1];
% Площадь шоссе (единица измерения: десять тысяч квадратных километров)
sqglmj=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 ...
0.56 0.59 0.59 0.67 0.69 0.79];
% Пассажирские перевозки по шоссе (ед .: десять тысяч человек)
glkyl=[5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 ...
22598 25107 33442 36836 40548 42927 43462];
% Объем грузовых автомобильных дорог (единица измерения: 10 000 тонн)
glhyl=[1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 ...
13320 16762 18673 20724 20803 21804];
p=[sqrs;sqjdcs;sqglmj]; % Матрицы входных данных
t=[glkyl;glhyl]; % Целевая матрица данных
[SamIn,minp,maxp,tn,mint,maxt]=premnmx(p,t); % Исходная выборка пары (вход и выход) инициализации
rand('state',sum(100*clock)) % Генерация случайных чисел на основе системных тактовых импульсов
NoiseVar=0.01; % Интенсивность шума составляет 0,01 (целью добавления шума является предотвращение перегрузки сети)
Noise=NoiseVar*randn(2,SamNum); % Произведенного шума
SamOut=tn + Noise; % Добавить шум к выходным выборкам
TestSamIn=SamIn; % Входная выборка такая же, как и тестовая, поскольку размер выборки слишком мал
TestSamOut=SamOut; % Также берет тот же выходной образец, что и тестовый образец
MaxEpochs=50000; % Максимальное время тренировки составляет 50000
lr=0.035; % Коэффициент обучения составляет 0,035
E0=0.65*10^(-3); % Целевая ошибка 0,65 * 10 ^ (-3)
W1=0.5*rand(HiddenUnitNum,InDim)-0.1; % Инициализация весов между входным слоем и скрытым слоем
B1=0.5*rand(HiddenUnitNum,1)-0.1; % Инициализировать порог между входным слоем и скрытым слоем
W2=0.5*rand(OutDim,HiddenUnitNum)-0.1; % Инициализировать вес между выходным слоем и скрытым слоем
B2=0.5*rand(OutDim,1)-0.1; % Инициализировать порог между выходным слоем и скрытым слоем
ErrHistory=[]; % Предварительно занимает память для промежуточных переменных
for i=1:MaxEpochs
HiddenOut=logsig(W1*SamIn+repmat(B1,1,SamNum)); % Скрытый сетевой выход
NetworkOut=W2*HiddenOut+repmat(B2,1,SamNum); % Выходного уровня сетевого выхода
Error=SamOut-NetworkOut; Разница в% между фактическим выходом и выходом сети
SSE=sumsqr(Error) Функция% энергии (сумма квадратов ошибок)
ErrHistory=[ErrHistory SSE];
if SSE<E0,break, end % Выпрыгните из цикла обучения, если вы соответствуете требованиям к ошибкам
% Следующие шесть строк являются основной программой сети BP
% Они являются весами (порогами) каждого шага динамической регулировки в соответствии с принципом отрицательного градиентного спуска.
Delta2=Error;
Delta1=W2'*Delta2.*HiddenOut.*(1-HiddenOut);
dW2=Delta2*HiddenOut';
dB2=Delta2*ones(SamNum,1);
dW1=Delta1*SamIn';
dB1=Delta1*ones(SamNum,1);
% Изменить вес и порог между выходным слоем и скрытым слоем
W2=W2+lr*dW2;
B2=B2+lr*dB2;
% Изменить вес и порог между входным слоем и скрытым слоем
W1=W1+lr*dW1;
B1=B1+lr*dB1;
end
HiddenOut=logsig(W1*SamIn+repmat(B1,1,TestSamNum)); % Скрытый слой выводит конечный результат
NetworkOut=W2*HiddenOut+repmat(B2,1,TestSamNum); % Выходной слой выходной конечный результат
a=postmnmx(NetworkOut,mint,maxt); % Результат восстановления слоя сети
x=1990:2009; Масштаб оси времени%
newk=a(1,:); % Выходной пассажиропоток сети
newh=a(2,:); % Выходной грузооборот сети
figure ;
subplot(2,1,1);plot(x,newk,'r-o',x,glkyl,'b--+') % Окрашенная схема сравнения стоимости пассажирских перевозок по шоссе;
legend(«Сеть вывода пассажиропотока»,«Фактический пассажиропоток»);
xlabel(«Год»);ylabel(«Пассажирский объем / 10000 человек»);
subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+') % Нарисуйте сравнительную диаграмму объема автомобильных перевозок;
legend(«Объем выходного груза сети»,«Фактический объем фрахта»);
xlabel(«Год»);ylabel(«Объем груза / 10000 тонн»);
% Используйте обученную сеть, чтобы делать прогнозы
% При использовании обученной сети для прогнозирования новых данных, они также должны обрабатываться соответствующим образом
pnew=[73.39 75.55
3.9635 4.0975
0.9880 1.0268]; % Соответствующие данные за 2010 и 2011 годы;
pnewn=tramnmx(pnew,minp,maxp); % Используйте параметры нормализации исходных входных данных для нормализации новых данных;
HiddenOut=logsig(W1*pnewn+repmat(B1,1,ForcastSamNum)); % Результатов прогнозирования скрытого слоя
anewn=W2*HiddenOut+repmat(B2,1,ForcastSamNum); % Выходного уровня выходного прогнозирования результата
% Восстановление данных, предсказанных сетью, до первоначального порядка;
anew=postmnmx(anewn,mint,maxt)