" > نحوه ي پیاده سازي شبکه SOM در متلب (بخش دوم) | موسسه همیارپروژه
با ما تماس بگیرید
ساعت : 8 الی 23
09117983709 - 09330859275
(مشاوره و سفارش پروژه)
totop

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

پیاده سازی شبکه خودسامان ده در متلب

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

در ادامه آموزش های سایت همیارپروژه درباره شبکه خودسازمانده با بخش دوم نحوه پیاده سازی شبکه های خودسازمانده در متلب آشنا خواهیم شد . با ما همراه باشید.

همانگونه که در بخش توضیحات شبکه ي SOM ارائه شد، این شبکه به پیشنهاد آقاي کوهونن در دو مرحله آموزش داده می شود، در مرحله ي اول فاز Ordering است که در آن سعی می شود با قدم هاي بزرگ یک ترتیب کلی در وزن همه ي نورون ها ایجاد شود از این رو پارامترهاي OLR که نرخ یادیگري این فاز است معمولا مقدار بزرگی است ( ۰٫۹ ) و در مرحله ي بعد که مرحله ي همگرایی است، TLR مقدار کوچکتري را دارا می باشد ( ۰٫۰۲ ) تا با تغییرات کوچک در وزن ها به نوعی تنظیم نهایی و دقیق تري در وزن ها ایجاد می شود.براي آموزش این شبکه نیز از دستور train استفاده می شود.

نمونه هایی از پیاده سازی شبکه SOM:

در این بخش چند نمونه از پیاده سازي هاي انجام گرفته براي این شبکه با نرم افزاهاي مختلف ارائه می شود، در ابتدا پیاده سازیی جامع در نرم افزار مطلب ارائه می گردد.
در ذیل واسط گرافیکی طراحی شده ارائه شده است.

پیاده سازی شبکه som

همانگونه که در واسط آن مشخص است، از طریق این پیاده سازي می توان همه ي حالات قابل پیاده سازي در نرم افزار مطلب را به همراه پارامتر هاي مختلف آن آزمایش کرد و نتایج را به صورت گرافیکی مشاهده نمود،
براي نمونه در ادامه یک مثال از اجراي آن ارائه می شود.

شبکه som در متلب

در اینجا نمونه هاي آموزشی به صورت ستاره هاي سبز رنگ و از طریق ماوس انتخاب شده اند، در ادامه با استفاده از دو روش مختلف دو شبکه ي مختلف را با استفاده از این نتایج آموزش می دهیم و سپس با توجه به مقدار وزن هاي نورون ها، مکان آنها را در تصویر مشخص می کنیم.

انجام پروژه som

در ضمن، پارامترهاي استفاده شده در شبکه هاي ایجاد شده همان هایی است که در واسط گرافیکی مشخص می باشند.

پروژه 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 با متلب

مشاهده می شود که وزن هاي اولیه به صورت کاملا تصادفی انتخاب شده اند

پروژه متلب

بعد از ۳۰۰۰ تکرار نرون ها تقریبا در دو جهت پخش شده اند ولیکن هنوز با جواب نهایی فاصله زیادي دارند.

نتایج پیاده سازی شبکه som

پس از ۶۰۰۰ تکرار نرون ها به خوبی پخش شده اند ولی هنوز تعداد زیادي نرون در وسط وجود دارد.

شبکه som

س از ۱۰۰۰۰ تکرار، نرون هاي وسط نیز به کناره ها رفته و پخشش داده ها را نمایش داده و به سمت داده ها متمرکز شده اند.اکنون می توان با ۷ کلاس آزمایش نمود و همچنین تعداد نرون ها را نیز بیشتر کرد.

۵۰ ، تعداد کلاس ها ۷ * تعداد نرون ها ۵۰

شبکهsom در متلب

تعداد نرون ها زیاد است و به صورت تصادفی پخش شده اند

شبکه خودسامانده در متلب

پس از ۳۰۰۰ تکرار تا حدودي شکل گرفته اند و مسیر آنها مشخص شده است ولیکن فاصله زیادي با جواب نهایی دارند زیرا که مثلا نرون ها به سمت داده هاي زرد نرفته اند

پیاده سازی شبکه خودسامان ده در متلب

پس از ۷۰۰۰ تکرار مشخص است که نرون ها جهت دهی بهتري دارند ولیکن تکلیف نرون هاي وسط هنوز به خوبی مشخص نیست.

کد متلب شبکه som

پس از ۱۰۰۰ تکرار می توان دید که محدوده بین داده ها نرون هاي بسیار کمی دارندو اکثر نرون ها به سمت داده ها هدایت شده اند.

دوستان و همراهان عزیز سایت همیارپروژه کار آموزش شبکه های som و نحوه پیاده سازی اون به اتمام رسیده وامیدوارم که این آموزش برای آگاهی شما مثمرثمر بوده باشه.شما دوستان اگر قصد انجام پروژه های متلب خود را دارید و فرصت یا مهارت لازم رو برای انجامش ندارید میتونید از کارشناسان ما برای مشاوره و یادگیری و سفارش پروژه متلب خودتون استفاده کنید.برای ارتباط بهتر میتونید در تلگرام یا واتساپ به شماره ۰۹۱۱۷۹۸۳۷۰۹ پیام تون رو بفرستین تا در اسرع وقت به اون پاسخ داده بشه.

سپاس از همراهی شما با آموزش های سایت همیارپروژه


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

حق نشر برای همیارپروژه – مرجع اصلی پروژه های متلب و پایتون محفوظ است.