Моделирование работы персептрона
Промоделируем работу персептрона, задавая различные значения весов (мы пока не применяем обучения). Используем сконфигурированный в предыдущем разделе персептрон. По умолчанию веса и смещения равны нулю. Установим веса и смещения
>> net1.IW{1,1}=[-1 1];
>> net1.b{1}=[1];
Разделяющая линия при таких весах и смещении имеет вид
.
Моделируем сеть с входным вектором P=[1; 1]
>> a1=net1(P)
a1 =
Легко проверить, что согласно при таком входном векторе на выходе должна быть 1.
Задаем вход p1
>> P2=[1; -1];
и моделируем работу сети
>> a2=net1(P2)
a2 =
Таким образом, персептрон правильно классифицировал векторы.
Задав массивы векторов входа и целей, можно построить график разделяющей линии. Определим векторы входов p3 и целейt3в виде массивов:
>> p3=[1 1; 1 -1];
>> t3=[1 0];
Построим векторы p3и t3в виде маркеров различного типа
>> plotpv(p3, t3)
Результаты представлены на рис. 1.7.
Рис. 1.7. Результаты моделирования в виде маркеров
На графике отображаются только компоненты входного вектора, которые относятся к разным классам (используются различные обозначения точек). Вектор целей используется для классификации входных векторов. Результат классификации не зависит от значения весов и смещения, т. е. сеть может быть не обучена (убедитесь в этом, задав нулевые веса и смещения).
Если известны веса и смещение обученной сети (а мы задали правильные значения весов и смещений), то можно построить разделяющую линию в пространстве входов:
>> plotpc(net1.IW{1,1}, net1.b{1})
График разделяющей линии показан на рис. 1.8.
Рис. 1.8. График разделяющей линии
Адаптация персептрона
Рассмотрим персептрон с двухэлементным вектором входа и одним выходом. Решим задачу адаптации персептрона для следующего обучающего множества
,
где и
,
— соответственно, входной вектор и соответствующее целевое значение.
Для адаптации персептрона используется функция adapt, которая для персептрона имеет синтаксис
[net1,Y,E]=adapt(net,P,T).
Входные аргументы:
net — имя нейронной сети;
P — массив ячеек входных векторов обучающего множества;
T — массив ячеек целевых значений.
Выходные аргументы:
net1 — имя адаптированной сети;
Y— массив ячеек выходов сети для каждого обучающего примера;
E — массив ячеек ошибок сети.
Функция adapt производит один проход процесса адаптации, т. е. настраивает веса поочередно, после однократной подачи каждого входного вектора. Поэтому для обучения персептрона необходимо многократно повторять процесс адаптации, пока ошибка не станет нулевой.
Программа adapt.m проводит адаптацию до тех пор, пока сумма квадратов ошибок (функция sse) не станет равной нулю. Для преобразования числовых массивов в массивы ячеек используется функция con2seq.
Программа adapt.m
% Обучение персептрона с двумя входами
clc % Очистка командного окна
clear % Очистка рабочего пространства
P = [-0.5 -0.5 +0.3 -0.1; -0.5 +0.5 -0.5 +1.0];
T = [1 1 0 0];
net = perceptron; % Создание персептрона
net = configure(net,P,T); % Конфигурирование персептрона
PP = con2seq(P); % Преобразование числового массива в массив ячеек
TT = con2seq(T);
E=1; % начальное значение ошибки
k=0; % счетчик циклов обучения
disp('ПРОЦЕСС АДАПТАЦИИ СЕТИ')
while(sse(E)) % пока среднеквадратическая ошибка не равна нулю
k=k+1
[net,a,E]=adapt(net, PP, TT); % адаптация сети
E
end
plotpv(P,T); % отображение векторов входов и целей в виде маркеров
plotpc(net.IW{1}, net.b{1}); % построение разделяющей линии
disp('РЕЗУЛЬТАТЫ АДАПТАЦИИ')
disp('Веса')
twts=net.IW{1} % веса
disp('Смещение')
tbiase=net.b{1} % смещение
disp('Выход сети')
a % выход сети
disp('Ошибка сети')
E % ошибка сети
disp('Число циклов обучения сети')
k % счетчик циклов обучения
Программа выводит вектор ошибки в каждом цикле адаптации и результаты адаптации:
ПРОЦЕСС АДАПТАЦИИ СЕТИ
k =
E =
[0] [0] [-1] [0]
k =
E =
[1] [0] [0] [-1]
k =
E =
[1] [1] [-1] [0]
k =
E =
[0] [0] [0] [0]
РЕЗУЛЬТАТЫ АДАПТАЦИИ
Веса
twts =
-2.0000 -0.5000
Смещение
tbiase =
Выход сети
a =
[1] [1] [0] [0]
Ошибка сети
E =
[0] [0] [0] [0]
Число циклов обучения сети
k =
График разделяющей линии показан на рис. 1.9.
Рис. 1.9. График разделяющей линии
Рис. 1.9 подтверждает правильную работу персептрона.
Задания
1. Проделайте все примеры, приведенные в работе.
2. Докажите правильность результатов работы программы adapt2.m.
3. Обучите разработанный нейрон на предложенном преподавателем варианте двухмерных данных и проверьте его работу на ряде контрольных точек. Обратите внимание на то, что некоторые варианты данных не являются линейно разделимыми. Ниже даны варианты различных обучающих выборок (масштабирующими значениями x1,m и x2,m необходимо задаться).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
Рис. 1.10. Варианты заданий