Создание сети

В ППП NNT для создания LVQ-сетей предусмотрена М-функция newlvq, обращение
к которой имеет следующий вид:

net = newlvq(PR,S1,PC,LR,LF)

где PR – массив размера R´2 минимальных и максимальных значений для R элементов вектора входа; S1 – количество нейронов конкурирующего слоя; PC – вектор с S 2 элементами, определяющими процентную долю принадлежности входных векторов к определенному классу; LR – параметр скорости настройки (по умолчанию 0.01); LF – имя функции настройки (по умолчанию для версии MATLAB 5 – 'learnlv2', для версии MATLAB 6 – 'learnlv1').

Предположим, что задано 10 векторов входа и необходимо создать сеть, которая,
во-первых, группирует эти векторы в 4 кластера, а во-вторых, соотносит эти кластеры
с одним из двух выходных классов. Для этого следует использовать LVQ-сеть, первый конкурирующий слой которой имеет 4 нейрона по числу кластеров, а второй линейный слой – 2 нейрона по числу классов.

Зададим обучающую последовательность в следующем виде:

P = [–3 –2 –2 0 0 0 0 2 2 3;

0 1 –1 2 1 –1 –2 1 –1 0];

Tc = [1 1 1 2 2 2 2 1 1 1];

Из структуры обучающей последовательности следует, что 3 первых и 3 последних ее вектора относятся к классу 1, а 4 промежуточных – к классу 2. На рис. 7.18 показано расположение векторов входа.

I1 = find(Tc==1); I2 = find(Tc==2);

axis([–4,4,–3,3]), hold on

plot(P(1,I1),P(2,I1),’+k’)

plot(P(1,I2),P(2,I2),’xb’) % Рис.7.18

Рис. 7.18

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

Преобразуем вектор индексов Tc в массив целевых векторов:

T = full(ind2vec(Tc))

T =

1 1 1 0 0 0 0 1 1 1

0 0 0 1 1 1 1 0 0 0

Процентные доли входных векторов в каждом классе равны 0.6 и 0.4 соответственно. Теперь подготовлены все данные, необходимые для вызова функции newlvq. Вызов может быть реализован c использованием следующего оператора

net = newlvq(minmax(P),4,[.6.4],0.1);

net.layers{1} ans = dimensions: 4 distanceFcn: 'dist' distances: [4´4 double] initFcn: 'initwb' netInputFcn: 'netsum' positions: [0 1 2 3] size: 4 topologyFcn: 'hextop' transferFcn: 'compet' userdata: [1´1 struct] net.layers{2} ans = dimensions: 2 distanceFcn: 'dist' distances: [2´2 double] initFcn: 'initwb' netInputFcn: 'netsum' positions: [0 1] size: 2 topologyFcn: 'hextop' transferFcn: 'purelin' userdata: [1´1 struct]



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