نحوه ي پیاده سازي شبکه SOM در متلب (بخش دوم)پنجشنبه 19, مارس 2020

نحوه ي پیاده سازي شبکه SOM در متلب (بخش دوم)
در ادامه آموزش های سایت همیارپروژه درباره شبکه خودسازمانده با بخش دوم نحوه پیاده سازی شبکه های خودسازمانده در متلب آشنا خواهیم شد . با ما همراه باشید.
همانگونه که در بخش توضیحات شبکه ي SOM ارائه شد، این شبکه به پیشنهاد آقاي کوهونن در دو مرحله آموزش داده می شود، در مرحله ي اول فاز Ordering است که در آن سعی می شود با قدم هاي بزرگ یک ترتیب کلی در وزن همه ي نورون ها ایجاد شود از این رو پارامترهاي OLR که نرخ یادیگري این فاز است معمولا مقدار بزرگی است ( ۰٫۹ ) و در مرحله ي بعد که مرحله ي همگرایی است، TLR مقدار کوچکتري را دارا می باشد ( ۰٫۰۲ ) تا با تغییرات کوچک در وزن ها به نوعی تنظیم نهایی و دقیق تري در وزن ها ایجاد می شود.براي آموزش این شبکه نیز از دستور train استفاده می شود.
نمونه هایی از پیاده سازی شبکه SOM:
در این بخش چند نمونه از پیاده سازي هاي انجام گرفته براي این شبکه با نرم افزاهاي مختلف ارائه می شود، در ابتدا پیاده سازیی جامع در نرم افزار مطلب ارائه می گردد.
در ذیل واسط گرافیکی طراحی شده ارائه شده است.
همانگونه که در واسط آن مشخص است، از طریق این پیاده سازي می توان همه ي حالات قابل پیاده سازي در نرم افزار مطلب را به همراه پارامتر هاي مختلف آن آزمایش کرد و نتایج را به صورت گرافیکی مشاهده نمود،
براي نمونه در ادامه یک مثال از اجراي آن ارائه می شود.
در اینجا نمونه هاي آموزشی به صورت ستاره هاي سبز رنگ و از طریق ماوس انتخاب شده اند، در ادامه با استفاده از دو روش مختلف دو شبکه ي مختلف را با استفاده از این نتایج آموزش می دهیم و سپس با توجه به مقدار وزن هاي نورون ها، مکان آنها را در تصویر مشخص می کنیم.
در ضمن، پارامترهاي استفاده شده در شبکه هاي ایجاد شده همان هایی است که در واسط گرافیکی مشخص می باشند.
برنامه نوشته شده براي کلاسترینگ داده ها با استفاده از شبکه عصبی som
%% Initialization
clear ; close all;
%clf; shg;
%% =========== Step 0: Loading and Visualizing Image Randomly
=============
در گام اول باید داده ها را بارگزاري نمود
load Aggregation.txt;
train_data = Aggregation(:,1:2);
y = Aggregation(:,3);
این داده داراي کلاس هاي مختلفی است
در ابتدا با ۲ کلاس، کار را بررسی می کنیم
b=(y==1 | y==2);
y=y(b);
train_data=train_data(b,:);
%plotData(train_data,y);
% dataRow is the number of training example
% dataCol is the number of features in each training example
[dataRow, dataCol] = size(train_data);
%% =========== Define the SOM Architecture
================================
% Determine the number of rows and columns in the selforganizing
map
اکنون باید شبکه را طراحی و وزن دهی اولیه نمود و در طی مراحل مختلف به روزرسانی کرد.
somRow = 20;
somCol = 20;
% Number of iteration for convergence
تعداد کل مراحل، براي همگرایی
Iteration = 10000;
%%=========== Parameter Setting For SOM
===================================
% Initial size of topological neighbourhood of the winning
neuron
SOM تنظیمات براي شبکه
width_Initial = 15;
% Time constant for initial topological neighbourhood size
t_width = Iteration/log(width_Initial);
% Initial time-varying learning rate
learningRate_Initial = 1;
% Time constant for the time-varying learning rate
t_learningRate = Iteration;
%% =========== Step 1: Initialize The Weight Of Neurons Randomly
=========
fprintf(‘\nInitializing The Weight Of Neurons Randomly …\n’)
% Initial weight vector of neuron
% somMap = randInitializeWeights(somRow,somCol,dataCol);
تعیین وزن هاي اولیه شبکه به صورت تصادفی
somMap=rand(somRow,somCol,dataCol)*40;
% Plot the training data
l=0;
%% =========== Step 2: Training SOM Iteratively
==========================
for t = 1:Iteration
% t
% Size of topological neighbourhood of the winning neuron at
the
% iteration of i
width = width_Initial*exp(-t/t_width);
width_Variance = width^2;
محاسبه همسایگی با استفاده از فرمول زیر
neighborhood=exp(-d^2/2*variance^2)
% The time-varying learning rate at the iteration of i
learningRate = learningRate_Initial*exp(-t/t_learningRate);
% Prevent learning rate become too small
if learningRate <0.025
learningRate = 0.1;
end
%% ================= The Competitive Process
=========================
% Compute the Euclidean distance between each neuron and
input
[euclideanDist, index] = findBestMatch( train_data, somMap,
somRow, …
somCol, dataRow, dataCol );
محاسبه فاصله بین نرون ها و داده ها
% Find the index of winning neuron
[minM,ind] = min(euclideanDist(:));
[win_Row,win_Col] = ind2sub(size(euclideanDist),ind);
محاسبه نزدیکترین نرون به داده ها و انجام عملیات رقابتی
%% Return the index of winning neuron
%% ================= The End of Competitive Process
==================
%% ================= The Cooperative Process
=========================
% Compute the neighborhood function for each neuron
neighborhood = computeNeighbourhood( somRow, somCol,
win_Row, …
win_Col, width_Variance);
محاسبه همسایگی براي هر نرون
%% Return the lateral distance between each neuron and
winning neuron
%% ================= The End Of Cooperative Process
==================
%% ================= The Adaptive Process
============================
% Update the weight of all the neuron on the grid
به روز رسانی وزن ها با استفاده از فرمول زیر
W(t+1) = W(t)+learningRate*neighborhood*(input-W(t))
somMap = updateWeight( train_data, somMap, somRow, somCol,
…
dataCol, index, learningRate, neighborhood);
%% ================= The End Of Adaptive Process
=====================
%% ========== Illustrate The Updated Clustering Results
==============
% Weight vector of neuron
dot = zeros(somRow*somCol, dataCol);
% Matrix for SOM plot grid
matrix = zeros(somRow*somCol,1);
% Matrix for SOM plot grid for deletion
matrix_old = zeros(somRow*somCol,1);
ind = 1;
% Retrieve the weight vector of neuron
for r = 1:somRow
for c = 1:somCol
dot(ind,:)=reshape(somMap(r,c,:),1,dataCol);
ind = ind + 1;
end
end
ترسیم شبکه پس از هر ۱۰۰۰ مرحله
% Plot SOM
if rem(t,1000)==0 | t==1
% figure
l=l+1;
plotData(train_data, y);
hold on;
f1 = figure(l);
set(f1,’name’,strcat(‘Iteration
#’,num2str(t)),’numbertitle’,’off’);
for r = 1:somRow
Row_1 = 1+somRow*(r-1);
Row_2 = r*somRow;
Col_1 = somRow*somCol;
matrix(2*r-1,1) =
plot(dot(Row_1:Row_2,1),dot(Row_1:Row_2,2),’–
ro’,’LineWidth’,2,’MarkerEdgeColor’,’g’,’MarkerFaceColor’,’g’,’M
arkerSize’,4);
matrix(2*r,1) =
plot(dot(r:somCol:Col_1,1),dot(r:somCol:Col_1,2),’–
ro’,’LineWidth’,2,’MarkerEdgeColor’,’g’,’MarkerFaceColor’,’g’,’M
arkerSize’,4);
matrix_old(2*r-1,1) = matrix(2*r-1,1);
matrix_old(2*r,1) = matrix(2*r,1);
end
pause(.1)
% % Delete the SOM plot from previous iteration
% if t~=Iteration
% for r = 1:somRow
% delete(matrix_old(2*r-1,1));
% delete(matrix_old(2*r,1));
% drawnow;
% end
% end
end
%% =================== The End Of Illustration
=======================
end
نتایج شبیه سازي:
مشاهده می شود که وزن هاي اولیه به صورت کاملا تصادفی انتخاب شده اند
بعد از ۳۰۰۰ تکرار نرون ها تقریبا در دو جهت پخش شده اند ولیکن هنوز با جواب نهایی فاصله زیادي دارند.
پس از ۶۰۰۰ تکرار نرون ها به خوبی پخش شده اند ولی هنوز تعداد زیادي نرون در وسط وجود دارد.
س از ۱۰۰۰۰ تکرار، نرون هاي وسط نیز به کناره ها رفته و پخشش داده ها را نمایش داده و به سمت داده ها متمرکز شده اند.اکنون می توان با ۷ کلاس آزمایش نمود و همچنین تعداد نرون ها را نیز بیشتر کرد.
۵۰ ، تعداد کلاس ها ۷ * تعداد نرون ها ۵۰
تعداد نرون ها زیاد است و به صورت تصادفی پخش شده اند
پس از ۳۰۰۰ تکرار تا حدودي شکل گرفته اند و مسیر آنها مشخص شده است ولیکن فاصله زیادي با جواب نهایی دارند زیرا که مثلا نرون ها به سمت داده هاي زرد نرفته اند
پس از ۷۰۰۰ تکرار مشخص است که نرون ها جهت دهی بهتري دارند ولیکن تکلیف نرون هاي وسط هنوز به خوبی مشخص نیست.
پس از ۱۰۰۰ تکرار می توان دید که محدوده بین داده ها نرون هاي بسیار کمی دارندو اکثر نرون ها به سمت داده ها هدایت شده اند.
دوستان و همراهان عزیز سایت همیارپروژه کار آموزش شبکه های som و نحوه پیاده سازی اون به اتمام رسیده وامیدوارم که این آموزش برای آگاهی شما مثمرثمر بوده باشه.شما دوستان اگر قصد انجام پروژه های متلب خود را دارید و فرصت یا مهارت لازم رو برای انجامش ندارید میتونید از کارشناسان ما برای مشاوره و یادگیری و سفارش پروژه متلب خودتون استفاده کنید.برای ارتباط بهتر میتونید در تلگرام یا واتساپ به شماره ۰۹۱۱۷۹۸۳۷۰۹ پیام تون رو بفرستین تا در اسرع وقت به اون پاسخ داده بشه.
سپاس از همراهی شما با آموزش های سایت همیارپروژه
دیدگاهتان را بنویسید