NEWP | Создание персептрона |
Синтаксис:
net = newp(PR,s,tf,lf)
Описание:
Персептроны предназначены для решения задач классификации входных векторов, относящихся к классу линейно отделимых.
Функция net = newp(PR, s, tf, lf) формирует нейронную сеть персептрона.
Входные аргументы:
PR – массив размера R´2 минимальных и максимальных значений для R векторов входа;
s – число нейронов;
tf – функция активации из списка {hardlim, hardlims}, по умолчанию hardlim;
lf – обучающая функция из списка {learnp, learnpn}, по умолчанию learnp.
Выходные аргументы:
net – объект класса network object.
Свойства:
Персептрон – это однослойная нейронная сеть с функциями взвешивания dotprod, накопления потенциала netsum и выбранной функцией активации. Слой характеризуется матрицей весов и вектором смещений, которые инициализируются М-функцией initzero.
Адаптация и обучение выполняются М-функциями adaptwb и trainwb, которые модифицируют значения весов и смещений до тех пор, пока не будет достигнуто требуемое значение критерия качества обучения в виде средней абсолютной ошибки, вычисляемой М-функцией mae.
|
|
Пример:
Создать персептрон с одним нейроном, входной вектор которого имеет 2 элемента, значения которых не выходят за пределы диапазона (рис. 11.6):
net = newp([0 1; 0 1],1);
gensim(net) % Рис.11.6
Рис. 11.6
Определим следующую последовательность двухэлементных векторов входа P,
составленных из 0 и 1:
P = {[0; 0] [0; 1] [1; 0] [1; 1]};
Обучим персептрон выполнять операцию ЛОГИЧЕСКОЕ И. С этой целью для полного набора входных векторов сформируем последовательность целей:
P1 = cat(2, P{:});
T1 = num2cell(P1(1,:) & P1(2,:))
T1 = [0] [0] [0] [1]
Применим процедуру адаптации, установив число проходов равным 10:
net.adaptParam.passes = 10;
net = adapt(net,P,T1);
Вектор весов и смещение можно определить следующим образом:
net.IW{1}, net.b{1}
ans = 2 1
ans = –3
Таким образом, разделяющая линия имеет вид:
L: 2p1 + p2 – 3 = 0.
Промоделируем спроектированную нейронную сеть, подав входную обучающую
последовательность:
Y = sim(net,P)
Y = [0] [0] [0] [1]
Настройка параметров сети выполнена правильно.
Обучим персептрон выполнять операцию НЕИСКЛЮЧАЮЩЕЕ ИЛИ. С этой целью для полного набора входных векторов Р сформируем последовательность целей:
P1 = cat(2, P{:});
T2 = num2cell(P1(1,:) | P1(2,:))
T2 = [0] [1] [1] [1]
Применим процедуру обучения, установив число циклов равным 20:
net.trainParam.epochs = 20;
net = train(net,P,T2);
Вектор весов и смещение можно определить следующим образом:
net.IW{1}, net.b{1}
net.IW{1}, net.b{1}
ans = 2 2
ans = –2
Таким образом, разделяющая линия имеет вид:
L: 2p1 + 2p2 – 2 = 0.
Промоделируем спроектированную нейронную сеть, подав входную обучающую
последовательность:
Y = sim(net,P)
Y = [0] [1] [1] [1]
Обучение и настройка сети выполнены правильно.
Замечание:
|
|
Персептроны решают задачу классификации линейно отделимых входных векторов за конечное время. В случае больших по длине входных векторов функция обучения learnpn может быть по времени выполнения предпочтительнее функции обучения learnp.
Сопутствующие функции: SIM, INIT, ADAPT, TRAIN, HARDLIM, HARDLIMS, LEARNP, LEARNPN.