Модель персептрона

Для формирования модели однослойного персептрона в системе MATLAB предназначена функция newp

net = newp(PR, S)

со следующими входными аргументами: PR – массив минимальных и максимальных значений для R элементов входа размера R x2; S – число нейронов в слое.

Например, функция

net = newp([0 2], 1);

создает персептрон с одноэлементным входом и одним нейроном;

диапазон значений входа – [0 2].

В качестве функции активации персептрона по умолчанию используется функция hardlim.

Моделирование персептрона

Рассмотрим однослойный персептрон с одним двухэлементным вектором входа, значения элементов которого изменяются в диапазоне от –2 до 2 (p 1 = [–2 2], p 2 = [–2 2], число нейронов в сети S = 1):

clear, net = newp([-2 2;-2 2],1); %Создание персептрона net

По умолчанию веса и смещение равны нулю, и для того, чтобы установить желаемые значения, необходимо применить следующие операторы:

net.IW{1,1} = [-1 1]; % Веса w11= -1; w12 = 1

net.b{1} = [1]; % Смещение b = 1

Запишем уравнение (1) в развернутом виде для данной сети:

,

В этом случае разделяющая линия имеет вид

L: - p 1 + p 2 + 1 = 0

и соответствует линии L на рисунке 2.

Определим реакцию сети на входные векторы p1 и p2, расположенные по разные стороны от разделяющей линии:

p1 = [1; 1];

a1 = sim(net,p1) % Моделирование сети net с входным

вектором p1

a1 = 1

p2 = [1; -1];

a2 = sim(net,p2) % Моделирование сети net с входным

вектором p2

a2 = 0

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

p3 = {[1; 1] [1; -1]}

a3 = sim(net,p3) % Моделирование сети net при

входном сигнале p3

p3 = [2x1 double] [2x1 double]

a3 = [1] [0]

Инициализация параметров

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

clear, net = newp([-2 2;-2 2],1);

Запросим характеристики весов входа

net.inputweights{1, 1}

ans =

delays: 0

initFcn: 'initzero'

learn: 1

learnFcn: 'learnp'

learnParam: [ ]

size: [1 2]

userdata: [1x1 struct]

weightFcn: 'dotprod'

Из этого списка следует, что в качестве функции инициализации по умолчанию используется функция initzero, которая присваивает весам входа нулевые значения. В этом можно убедиться, если извлечь значения элементов матрицы весов и смещения:

wts = net.IW{1,1}, bias = net.b{1}

wts =

0 0

bias =

Теперь переустановим значения элементов матрицы весов и смещения:

net.IW{1,1} = [3, 4]; net.b{1} = 5;

wts = net.IW{1,1}, bias = net.b{1}

wts = 3 4

bias = 5

Для того чтобы вернуться к первоначальным установкам параметров персептрона, предназначена функция init:

net = init(net); wts = net.IW{1,1}, bias = net.b{1}

wts = 0 0

bias = 0

Можно изменить способ, каким инициализируется персептрон с помощью функции init. Для этого достаточно изменить тип функции инициализации, которые применяются для установки первоначальных значений весов входов и смещений. Например, воспользуемся функцией инициализации rands, которая устанавливает случайные значения параметров персептрона:

% Задать функции инициализации весов и смещений

net.inputweights{1,1}.initFcn = 'rands';

net.biases{1}.initFcn = 'rands';

% Выполнить инициализацию ранее созданной сети с новыми функциями

net = init(net);

wts = net.IW{1,1}, bias = net.b{1}

wts = -0.1886 0.8709

bias = -0.6475

Видно, что веса и смещения выбраны случайным образом.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: