Лабораторная работа №7 исследование сети кохонена и алгоритма обучения без учителя



бет5/7
Дата19.10.2022
өлшемі1,17 Mb.
#44151
түріЛабораторная работа
1   2   3   4   5   6   7
Байланысты:
Лабораторная работа №7

data2 = [1.7; 8.7];


a = sim(network1, data1)
a =
(3,1) 1
Возбужденный нейрон показывает номер класса. В нашем случае входной вектор data2 отнесен к третьему классу.
  1. Создание и использование соперничающего слоя в командном окне





    1. Зададим множество, состоящее из четырех двухэлементных векторов Р: P = [.2 .5 .1 .8; .3 .7 .2 .6]; % определение входного вектора Соперничающий слой должен разделить входы на два класса:

net = newc ([0 1; 0 1], 2); % создание соперничающего слоя
net = train (net, P); % обучение соперничающего слоя на векторе Р Результирующая сеть выдает выходной вектор, конвертируемый в номер
класса:
Y = sim (net, P) % имитация работы слоя Y =

(2,1)

1

(1,2)

1

(2,3)

1

(1,4)

1

Yc = vec2ind(Y) % конвертирование выхода сети в номер класса; Y состо- ит из векторов, содержащих только по одной единице. Функция vec2ind пока- зывает индексы единичных позиций.
Yc =
2 1 2 1



    1. Пример решения задачи кластеризации векторов

Пусть заданы 30 случайных векторов, изображённых на графике снежин- ками (рисунок 7.10). Оцифровав данный график, можно получить массив вход-



ных данных
P(1,:), P(2,:)
(табл. 7.1).


6


4

2


0


-2


-4
-4 -2 0 2 4 6 8 10



P(1,:)

-1.2

-0.5

1.4

2.6

9.5

2.8

7.1

2.6

0.2

2.6

P(2,:)

3.3

2.6

2.6

2.7

1.6

-1.3

-0.6

-2.2

6.4

7.7

P(1,:)

-1.5

8.1

6.2

7.2

3.5

-0.8

3.4

1.6

8.3

5.0

P(2,:)

2.8

3.9

-0.2

0.9

2.8

4.6

7.5

3.2

-1.4

3.3

P(1,:)

6.7

1.7

-0.1

3.3

4.1

8.8

-2.6

8.3

4.2

8.2

P(2,:)

1.0

4.9

4.8

5.4

1.3

1.5

3.7

-1.3

-1.4

1.9



Рисунок 7.10. Распределение входных векторов Таблица 7.1. Массив входных данных
Следующий алгоритм демонстрирует процедуру обучения самоорганизу- ющейся нейронной сети Кохонена.

plot(P(1,:), P(2,:), '*g');


title('Input vectors'); xlabel('P(1,:)');
ylabel('P(2,:)'); hold on; nclusters = 6;
a1 = -3;
a2 = 10;
b1 = -3;
b2 = 9;
net = newc([a1 a2; b1 b2], nclusters, 0.1, 0.0005); wo = net.IW{1};
bo = net.b{1}; net.trainParam.epochs=100; net.trainParam.show=20; net = train(net,P);
w = net.IW{1};
bn = net.b{1}; plot(w(:,1),w(:,2),'kp');
На рисунке 7.11 представлены исходные данные (снежинки) и полученные центры кластеризации (звёзды).
Input vectors

6
4

P(2,:)
2
0
-2
-4
-4 -2 0 2 4 6 8 10
P(1,:)
Рисунок 7.11. Распределение входных данных (крестики) и положение центров кластериза- ции (звёздочки)


  1. Применение SOM для кластеризации векторов


Рассмотрим работу SOM на примере задачи кластеризации 1000 двухэле- ментных векторов, расположенных в ограниченной прямоугольной области (Рисунок 7.12).


P = rands(2, 1000); % определение множества векторов для кластеризации
plot(P(1,:), P(2,:), '*g') % изображение множества векторов
1

0.8

0.6

0.4

0.2

0


-0.2


-0.4


-0.6


-0.8

-1
-1 -0.8


-0.6 -0.4
-0.2 0 0.2
0.4 0.6 0.8 1

Рисунок 7.12. Множество исходных векторов для кластеризации




net = newsom ([0 1; 0 1], [5 6]); % создание SOM размерностью 5x6. Используем сеть размерностью 5x6, чтобы классифицировать вышеопре-
деленные векторы. Создадим сеть с 30 центрами, к которым сеть будет отно- сить каждый вектор на основе ближайшего соседства.
plotsom(net. iw{ 1,1}, net.layers{1}.distances); % визуализация SOM Сначала центр прямоугольника совпадает с центрами классов. Обучим
сеть на 100 эпохах и изобразим результат: net.trainParam.epochs = 100; % установка количества эпох net = train(net, P) % обучение сети
Во время обучения появляется панель инструментов (рисунок 7.13).
Есть несколько полезных визуализаций, доступ к которым можно полу- чить из этого окна. При нажатии SOM Weight Positions, появляется фигура (ри- сунок 7.14), которая показывающая расположение точек данных и весовых век- торов. Как показано на рисунке, только после 100 итераций алгоритма, веса си- напсов настроились таким образом, чтобы узлы решетки «располагались» в ме- стах локальных сгущений данных, то есть описывали кластерную структуру облака данных.


Рисунок 7.13. Окно обучения нейронной сети

Рисунок 7.14. Расположение точек данных и весовых векторов


При высокой размерности входа, нельзя одновременно визуализировать все веса. В этом случае, можно нажать SOM Neighbor Distances (рисунок 7.15).


Здесь используется следующее кодирование цвета: синие шестиугольни- ки представляют собой нейроны. Красные линии соединяют соседние нейроны. Цвета в областях, содержащих красные линии указывают расстояния между нейронами. Более темные цвета представляют большие расстояния. Чем свет- лее цвета, тем меньше расстояния. Сравнивая рисунки 7.15 и 7.15, убеждаемся в их идентичности.

Рисунок 7.15. Сила взаимодействия (веса нейронов) соседних нейронов в карте Кохонена

Нажав SOM Sample Hits можно увидеть количество точек данных, связан- ных с каждым нейроном (рисунок 7.16). Лучше всего, если данные достаточно равномерно распределены между нейронами. В этом примере, данные менее связанны с центральными нейронами, но в целом распределение удовлетвори- тельное.


Рисунок 7.16. Количество точек данных, связанных с каждым нейроном


Визуализацию весов, соединяющих каждый вход с каждым из нейронов, можно увидеть нажав SOM Weight Planes (рисунок 7.17). Здесь темные цвета представляют большие веса. Если схемы соединения из двух входов очень по- хожи, можно предположить, что входы высоко коррелированны. В нашем слу- чае вход 1 имеет связи, которые очень отличаются от входа 2.



Рисунок 7.17. Визуализация весов, соединяющих каждый вход с каждым из нейронов




Достарыңызбен бөлісу:
1   2   3   4   5   6   7




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет