Для однослойного персептрона в качестве параметров нейронной сети в общем случае выступают веса входов и смещения. Допустим, что создается персептрон с двухэлементным вектором входа и одним нейроном:
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: [1´1 struct]
weightFcn: 'dotprod'
Из этого перечня следует, что в качестве функции инициализации по умолчанию
используется функция initzero, которая присваивает весам входа нулевые значения.
В этом можно убедиться, если извлечь значения элементов матрицы весов и смещения:
wts = net.IW{1,1}
wts = 0 0
bias = net.b{1}
bias = 0
Теперь переустановим значения элементов матрицы весов и смещения:
net.IW{1,1} = [3, 4]
net.b{1} = 5
wts = 3 4
bias = 5
Для того, чтобы вернуться к первоначальным установкам параметров персептрона,
и предназначена функция init:
net = init(net);
wts
wts = 0 0
bias
bias = 0
Можно изменить способ, каким инициализируется персептрон с помощью функции init. Для этого достаточно изменить тип функций инициализации, которые применяются для установки первоначальных значений весов входов и смещений. Например, воспользуемся функцией инициализации rands, которая устанавливает случайные значения параметров персептрона.
% Задать функции инициализации весов и смещений
net.inputweights{1,1}.initFcn = 'rands';
net.biases{1}.initFcn = 'rands';
% Выполнить инициализацию ранее созданной сети с новыми функциями
net = init(net);
wts = net.IW{1,1}
wts = –0.96299 0.64281
bias = net.b{1}
bias = –0.087065
Видно, что веса и смещения выбраны случайным образом.