русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Close all


Дата добавления: 2014-11-28; просмотров: 1928; Нарушение авторских прав


P=0:0.5:10;%входы

for i=1:21

T(i)=sin(P(i))-cos(P(i));%целевые выходы

End

net=newrb(P,T,0);%создание радиально-базисной сети

NEWRB, neurons = 0, SSE = 13.9849

net.layers{1}.size%число нейронов скрытого слоя НС

net.layers{2}.size

E1=sim(net,P);%опрос сети на обучающую выборку

P2=[0.75 3.82 6.77 8.24 9.73];%тестовая выборка

E2=sim(net,P2);%опрос сети на тестовую выборку

sum=0;

for i=1:5

T2(i)=sin(P2(i))-cos(P2(i));

error(i)=T2(i)-E2(i);

sum=sum+error(i)^2;

End

sko=sqrt(sum/5)%среднеквадратичное отклонение между

%идеальными значениями сигнала тестовой выборки и выходом сети

figure(1);%построение графика

hold on;

plot(P,T,'LineWidth',1),grid;

plot(P,E1,'or','LineWidth',2);

plot(P2,E2,'+k','MarkerSize',10,'LineWidth',2);

xlabel('P,P2'); ylabel('T,E1,E2');

legend ('Исходные данные','Выходы НС на обучающую выборку','Выходы НС на тестовую выборку',0);

Ниже представлен сформированный массив ошибок между идеальными значениями сигнала тестовой выборки и выходами сети, рассчитанное среднеквадратичное отклонение и графическое отображение результатов работы нейронной сети (рис. 6.25):

error =1.0e-004 *

0.7597 -0.0055 -0.0316 0.0541 0.6102

sko = 4.3667e-005.

 

Рис. 6.25. Выходы нейронной сети на обучающую и тестовую выборки

Переходя ко второму заданию напомним, что вероятностные нейронные сети PNN предназначены для решения вероятностных задач и, в частности, задач классификации.

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



Предполагается, что задано обучающее множество, состоящее из Q пар векторов вход/цель. Каждый вектор цели имеет K элементов, указывающих класс принадлежности, и, таким образом, каждый вектор входа ставится в соответствие одному из K классов. В результате может быть образована матрица связности T размера K×Q, состоящая из нулей и единиц, строки которой соответствуют классам принадлежности, а столбцы – векторам входа. Таким образом, если элемент ti,j матрицы связности равен 1, то это означает, что j-й входной вектор принадлежит к классу i.

Весовая матрица первого слоя формируется с использованием векторов входа из обучающего множества в виде матрицы . Когда подается новый вход, вычисляетcя близость нового вектора к векторам обучающего множества; затем вычисленные расстояния умножаются на смещения и подаются на вход функции активации radbas. Вектор обучающего множества, наиболее близкий к вектору входа, будет представлен в векторе выхода y(1) числом близким к 1.

Весовая матрица второго слоя соответствует матрице связности T, построенной для данной обучающей последовательности. В среде MATLAB эта операция может быть выполнена с помощью функции ind2vec, которая преобразует вектор целей в матрицу связности T. Произведение T*y(1) определяет элементы вектора y(1), соответствующие каждому из К классов. В результате конкурирующая функция активации второго слоя формирует на выходе значение, равное 1 для самого большего по величине квадрата элемента вектора y(1) и 0 в остальных случаях. В среде MATLAB конкурирующая функция активации реализована в функции compet. Таким образом, сеть PNN выполняет классификацию векторов входа по K классам.

Для выполнения второго задания в математической среде MATLAB создаем новый M-File, в котором записываем код программы создания и обучения вероятностной нейронной сети с использованием функций пакета нейронных сетей Neural Networks Toolbox:

 

clear all; %очищаем память

close all;

P=[1 2; 3 6; 2 8; 6 9; 1 7; 8 6; 10 17; 23 29]'; %вектора входа

Tc=[1 1 2 2 2 3 3 3]; %вектор отнесения заданных векторов входа заданным классам

T=ind2vec(Tc) %матрица связанности

T=full(T) %полная матрица %связанности

net=newpnn(P,T); %создание вероятностной сети

E1=sim(net,P); %опрос сети на обучающую выборку

E1c=vec2ind(E1)

P1=[1 6; 4 7; 9 19]'; %произвольные вектора

E2=sim(net,P1); %опрос сети

E2c=vec2ind(E2)

 

Ниже приведен результат выполнения программы:

 

T = %матрица связанности, которая определяет принадлежность первых двух векторов 1-му классу, последующих трех векторов 2-у классу и последних трех векторов 3-му классу

(1,1) 1

(1,2) 1

(2,3) 1

(2,4) 1

(2,5) 1

(3,6) 1

(3,7) 1

(3,8) 1

T = %полная матрица связанности

1 1 0 0 0 0 0 0

0 0 1 1 1 0 0 0

0 0 0 0 0 1 1 1

E1c = %результат опроса сети на обучающую выборку, который подтверждает правильность решения задачи классификации

1 1 2 2 2 3 3 3

E2c = %результат опроса сети на произвольные вектора: 1-й вектор отнесен ко второму классу, 2-й вектор к первому классу, 3-й вектор к третьему классу

2 1 3

Вывод (пример):

В ходе выполнения лабораторной работы я изучил теоретические основы функционирования нейронных сетей радиально-базисных функций и вероятностных сетей. На основе встроенных функций пакета нейронных сетей среды MATLAB с использованием радиально-базисной нейронной сети я решил задачу аппроксимации функции (в качестве радиально-базисной функции я использовал гауссиан), а с использованием вероятностной нейронной сети решил задачу классификации векторов заданным классам.

Контрольные вопросы:

 

1. Опишите структуру и принцип функционирования нейронных сетей радиально-базисных функций.

2. В чем заключаются преимущества и недостатки нейронных сетей радиально-базисных функций?

3. Какие функции могут быть использованы в качестве активационных функций радиально-базисных нейронных сетей?

4. Для каких задач могут быть использованы вероятностные сети?

5. Какая функция активации используется в конкурирующем слое вероятностной сети?

6. На основе самостоятельно изучения опишите функции (назначение, синтаксис, аргументы) среды MATLAB для работы с нейронными сетями радиально-базисных функций: newrb, newrbe, newpnn, newgrnn.

3.6. Построение нейронечеткой модели с помощью ANFIS-редактора

Цель работы:Научиться использовать ANFIS-редактор системы MATLAB для построения нейронечеткой модели.

Задание: Используя ANFIS-редактор построить нейронечеткую систему типа Сугено из экспериментальных данных.

Пример выполнения:

Задача: Построить нечеткую модель зависимости валового дохода от основных средств и основных фондов с использованием нечеткой нейронной сети, сконструированной в ANFIS-редакторе.

Пусть обучающая выборка составляет 100 примеров, а тестовая – 20. В среде MATLAB вводим данные обучающей выборки r_set и тестовой выборки r_test: матрицы состоящие из 3-х столбцов, первые два которых содержат данные входных переменных, третий – выходной переменной. Командой anfiseditзагружаем ANFIS-редактор, в которой сгенерируем и обучим нечеткую систему типа Сугено (рис. 6.26):

Для загрузки обучающей выборки в окне ANFIS-редактора в блоке загрузки данных (Load data) в меню типа (Type) выбираем тип обучения (Training), а в качестве источника загрузки (From) выбираем рабочую область MATLAB (worksp.) и нажимаем кнопку загрузки данных (Load data). Появится окно (рис. 6.27) в котором указываем имя массива обучающей выборки r_set и нажимаем кнопку OK.

Для загрузки тестовой выборки в меню типа устанавливаем тип тестирования (Testing), нажимаем кнопку загрузки данных (Load data), в появившемся окне вводим имя массива тестовой выборки r_testи нажимаем кнопку OK. В блоке генерации нечеткой системы (Generate FIS) имеются следующие альтернативы: загрузка системы с диска (Load from disk), загрузка системы из рабочей области MATLAB (Load from worksp.), генерирование системы по алгоритму решетчатого разбиения без кластеризации (Grid partition) и генерирование системы через субтрактивную кластеризацию по горному методу (Sub. clustering). Выберем метод решетчатого разбиения Grid partition,согласно которому функции принадлежности нечетких термов равномерно распределяются внутри диапазона изменения данных. База знаний содержит все возможные варианты правил. Коэффициенты в заключениях правил принимаются равными нулю. Нажимаем на кнопку генерации нечеткой системы (Generate FIS). В появившемся окне (рис. 6.28) необходимо указать количество и тип функций принадлежности входных и выходных переменных и нажать на кнопку OK.

 

Рис. 6.26. ANFIS-редактор

 

Рис. 6.27. Окно ввода имени массива обучающей выборки

Архитектуру синтезированной нейронечеткой сети (рис. 6.29) можно посмотреть нажав на кнопку структуры сети (Structure) блока информации системы ANFIS (ANFIS Info.)

В блоке обучения (Train FIS) необходимо выбрать метод обучения (Optim. Method), точность обучения (Error tolerance), количество итераций обучения (Epochs) и нажать на кнопку обучения (Train Now). В АNFIS-редакторе реализованы два метода обучения: метод обратного распространения ошибки (backpropa) и гибридный алгоритм, объединяющий метод обратного распространения ошибки и метода наименьших квадратов (hybrid). Выберем гибридный метод обучения, укажем точность обучения равную 0, количество итераций равное 300 и нажмем на кнопку обучения. Динамика обучения выводится в основном окне редактора ANFIS (рис. 6.30): ось абсцисс соответствует итерациям алгоритма обучения, ось ординат – значениям средней квадратичной ошибки.

Рис. 6.28. Выбор количества и типа функций принадлежности

 

Рис. 6.29. Архитектура синтезированной нейро-нечеткой сети

После настройки ошибка обучения составила 5.8778. Для проверки модели на тестовой выборке в блоке тестирования нечеткой системы (Test FIS) выберем тестовые данные (Testing data) и нажмем на кнопку тестирования (Test Now). Результаты тестирования выводится в основном окне редактора ANFIS (рис. 6.31). Экспериментальные данные показаны точками, а результаты моделирования звездочками. Ошибка на тестовой выборке составила 3.3583. Используя меню Файл->Экспорт->В файл (File->Export->To File) можно сохранить на диске синтезированную нейронечеткую сеть. С помощью меню Редактирование->Свойства нечеткой системы (Edit->Properties FIS) можно в FIS-редакторе посмотреть и при необходимости отредактировать синтезированную систему (рис. 6.32).

Рис. 6.30. Обучение синтезированной нейронечеткой сети

Рис. 6.31. Тестирование синтезированной нейронечеткой сети

Рис. 6.32. FIS-редактор

 

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

n=length(r_set);

n_t=length(r_test);

X=[ones(n,1) r_set(:,1) r_set(:,2)];

A=X\r_set(:,3);

%Несоответствие на обучающей выборке

Out_m=X*A;

r_tr=norm(r_set(:,3)-Out_m)/sqrt(n);%ошибка

%Несоответствие на тестовой выборке

X_test=[ones(n_t,1) r_test(:,1) r_test(:,2)];

Out_m=X_test*A;

r_check=norm(r_test(:,3)-Out_m)/sqrt(n_t); %ошибка

В результате ошибки линейной регрессии на обучающей и тестовой выборках составили 6.2841 и 3.9043 соответственно.

Мы можем получить нелинейную модель вида и вычислить ошибки регрессии используя следующий код:

n=length(r_set);

n_t=length(r_test);

X=[ones(n,1) r_set(:,1) r_set(:,2) r_set2(:,1) r_set2(:,2)];

A=X\r_set(:,3);

%Несоответствие на обучающей выборке

Out_m=X*A;

r_tr=norm(r_set(:,3)-Out_m)/sqrt(n);%ошибка

%Несоответствие на тестовой выборке

X_test=[ones(n_t,1) r_test(:,1) r_test(:,2) r_test2(:,1) r_test2(:,2)];

A=X_test\r_test(:,3);

Out_m=X_test*A;

r_check=norm(r_test(:,3)-Out_m)/sqrt(n_t); %ошибка,

где r_set2 и r_test2 – это матрицы, все элементы которых равны квадратам элементов матриц r_set и r_test соответственно. Для приведенного примера ошибки обучающей и тестовой выборок составили 5.9873 и 3.4317 соответственно.

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

Таким образом, нечеткая модель точнее линейной и нелинейной моделей регрессии описывает рассматриваемую зависимость.

 

Вывод (пример):

В ходе выполнения лабораторной работы я научился работать с ANFIS-редактором для построения нечетких нейронных сетей.

Контрольные вопросы:

1. Что представляют собой нечеткие нейронные сети?

2. Какая нечеткая система лежит в основе систем ANFIS?

3. Как можно просмотреть базу знаний синтезированной системы ANFIS?

4. Какие методы генерации ANFIS-систем предусмотрены в ANFIS-редакторе?

5. Какие опции необходимо ввести при выборе метода субтрактивной кластеризации для генерации нечеткой системы?

 

 

Приложение 1. Функции пакета «Fuzzy Logic Toolbox» системы MATLAB для работы с системами нечеткой логики

 

Ниже перечислены основные из них:

· addmf – добавление функции принадлежности в FIS (Fuzzy Inference System – Нечеткая система вывода);

· addrule – добавление правила в FIS;

· addvar – добавление переменной в FIS;

· anfis– обучение FIS типа Сугено (Sugeno type);

· convertfis – преобразование FIS-матрицы (Fuzzy Logic Toolbox v.1) в FIS-структуру (Fuzzy Logic Toolbox v.2);

· defuzz – дефаззификация нечеткого множества;

· discfis – дискретизация функций принадлежности всех термов, входящих в FIS;

· dsigmf– функция принадлежности в виде разности между двумя сигмоидными функциями;

· evalfis – выполнение нечеткого логического вывода;

· evalmf – вычисление значений произвольной функции принадлежности;

· evalmmf– расчет степеней принадлежностей для нескольких функций принадлежностей;

· fcm – поиск кластеров по алгоритму fuzzy c-means;

· findrow – нахождение строки в матрице, совпадающей с входной строкой;

· fstrvcat – конкатенация матриц различного размера;

· fuzarith – нечеткий калькулятор;

· gauss2mf – двухсторонняя гауссовская функция принадлежности;

· gaussmf – гауссовская функция принадлежности;

· gbellmf – обобщенная колокообразная функция принадлежности;

· genfis1 – генерирование из данных исходной FIS типа Сугено без использования кластеризации;

· genfis2– генерирование из данных исходной FIS типа Сугено с использованием субтрактивной (вычитающей) кластеризации;

· genparam – генерирование исходных параметров функций принадлежности для обучения ANFIS (Adaptive-Network-based Fuzzy Inference System – Адаптивная сеть основанная на нечеткой системе вывода);

· gensurf– генерирование поверхности «входы-выход», соответствующей FIS;

· getfis– получение свойств FIS;

· mam2sug – преобразование FIS типа Мамдани в FIS типа Сугено;

· mf2mf – пересчет параметров встроенных функций принадлежности различных типов;

· newfis– создание новой FIS;

· parsrule – вставка в FIS правил, заданных в виде предложений на естественном языке;

· pimf -подобная функция принадлежности;

· plotfis – вывод основных параметров FIS в виде графической схемы;

· plotmf – вывод графиков функций принадлежности термов одной переменной;

· probor – вероятностная реализация логической операции ИЛИ;

· psigmf – произведение двух сигмоидных функций принадлежности;

· readfis– загрузка FIS из файла;

· rmmf– удаление функции принадлежности терма из FIS;

· rmvar – удаление переменной из FIS;

· setfis– назначение свойств FIS;

· showfis – вывод на экран в текстовом формате данных, составляющих FIS-структуру;

· showrule – вывод базы знаний FIS;

· sigmf– сигмоидная функция принадлежности;

· smf– s-подобная функция принадлежности;

· subclust – оценка количества кластеров в субтрактивной (вычитающей) кластеризации;

· sugmax – нахождения диапазона изменения выходной переменной в FIS типа Сугено;

· trapmf– трапециевидная функция принадлежности;

· trimf– треугольная функция принадлежности;

· writefis – сохранение FIS на диске;

· zmf – z-подобная функция принадлежности;

· distfcm – расчет расстояния по Эвклиду;

· initfcm – генерирование исходной матрицы степеней принадлежности для нечеткой c-means кластеризации;

· isfis – проверка структуры данных системы нечеткого логического вывода.

 

 


Приложение 2. Функции пакета «Neural Network Toolbox» системы MATLAB для работы с нейронными сетями



<== предыдущая лекция | следующая лекция ==>
Нейронные сети радиально-базисных функций. Вероятностные сети | CLR – коэффициент «справедливости» (по умолчанию 0.001).


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.339 сек.