Лабораторная работа № 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.