Лабораторная работа № 11. Самоорганизующиеся слои Кохонена

Цели работы: 1) изучение архитектуры самоорганизующихся нейронных слоев Кохонена и специальных функций для их создания, инициализации, взвешивания, накопления, активации, настройки весов и смещений, адаптации и обучения; 2) ознакомление с демонстрационными примерами и их скриптами; 3) приобретение навыков построения самоорганизующихся слоев для исследования топологической структуры данных, их объединением в кластеры (группы) и распределением по классам.

Задание 1. Создать слой Кохонена для двух векторов входа, проанализировать его структурную схему и параметры вычислительной модели, произвести обучение сети и моделирование, выполнив следующие команды:

P = [.1 .8 .1 .9; .2 .9 .1 .8]; % для обучения слоя;

net = newc([01;01],2); % создание слоя

gensim (net); % структура слоя

net = train(net,P); % обучение слоя

w = net.Iw{1,1}; % веса после обучения

b = net.b{1}; % смещение после обучения

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

title (′Векторы входа′),xlabel(′P(1,:)′), ylabel(′P(2,:)′)

hold on

plot (w, ′or′)

P1= [0.2:0.1:0.7; 0.2:0.1:0.7];

y = sim(net,P1)

yc = vec2ind(Y)

Задание 2. Создать слой Кохонена, который для 48 случайных векторов формирует 8 кластеров, выполнив следующие команды:

c = 8; % число кластеров

n = 6; % число векторов в классе

x = [–10 10; –5 5]; % диапазон входов

[r,q] = size(x); % r – число строк, q – число столбцов

minU = min(x′)′ % минимальные значения

maxU = max(x′)′ % максимальные значения

v = rand(r,c)*((maxv – minU)*ones(1,c)+minU*ones(1,c));

t = c*n % число точек

v = [v v v v v v]; % 48 двухэлементных векторов

v =v+randn(r,t)*d; % координаты точек

P = v; % векторы с отклонениями (нормальный закон)

plot (P(1,:),P(2,:), ′+k′)

title (‘Векторы входа’),xlabel(′P(1,:)′), ylabel(′P(2,:) ′)

net =newc([–2 12; –1 6],8 0.1);

wo = net.IW{1,1} % веса после инициализации

bo = net.b{1} % смещения после инициализации

co = exp(1)/60 % начальная активность

net.trainParam.epochs = 500; % обучение

net = train(net, P) , a = sim(net, P), ac = vec2ind(a)

net.IW{1} % веса после обучения

bn = net.b{1} % смещения после обучения

cn = exp(1)/bn % активность после обучения

net = newc([–2 12; –1 6], 8 0.1);

co = exp(1). /net.b{1} % начальная активность

net.adaptParam.passes = 500;

[net, y,e] = adapt (net, mat2cell(p)) % адаптация

a = sim(net, P) % моделирование после

ac = vec2ind(a) % адаптации.

Задание 3. Построить график приращений вектора смещений и проанализировать пример democ1.