قبلاً در پستی در همین وبسایت،
نحوه آموزش شبکه عصبی (Neural Network Training) توسط الگوریتم رقابت استعماری (ICA) خدمت علاقه مندان الگوریتم رقابت استعماری و شبکه های عصبی مصنوعی، آموزش دادیم. بالاخره بعد از مدتها، فرصتی پیش آمد تا در پاسخ به درخواستهای بیشمار مراجعین محترم وبسایت محاسبات تکاملی، کدهای آماده آموزش شبکه عصبی توسط الگوریتم رقابت استعماری را نیز در اختیار مراجعین محترم قرار دهیم. در ادامه لینک دانلود این کدها به همراه توضیحاتی در مورد بخش های مختلف آن آمده است.
دانلود کدها
راهنمایی در مورد کدها و نحوه استفاده
در مورد روند علمی کار توضیحاتی در لینک زیر آمده است که درک و استفاده از کدها را آسانتر خواهد کرد.
جهت درک بهتر توابع مختلف مورد استفاده همراه کدهایی دانلود کرده اید، بهتر است نگاهی به کدهای آماده الگوریتم رقابت استعماری در این لینک (+) بیاندازید و راهنمای توابع مختلف همراه کدها را مطالعه نمایید.
به همراه فایلها، یک فایل excel با نام Data وجود دارد. داده ها از این فایل خوانده می شوند. ستون آخر این فایل به عنوان خروجی و بقیه ستونها (مستقل از تعدادشان)، به عنوان ورودی در نظر گرفته می شوند. بنابراین برنامه انعطاف لازم برای استفاده در مسائل مختلف مرتبط با شبکه عصبی با داشتن تعداد مختلف ورودی برای شبکه را دارد.
تابع TrainUsingICA_Fcn.m، نیز تظمیات مرتبط با یادگیری (بهینه سازی را دارد). مثلاً تعداد کشورهای اولیه و ضرایب مختلف الگوریتم رقابت استعماری را می توانید در این تابع تنظیم نمایید. همانگونه که می دانید افزایش تعداد کشورهای اولیه و دهه در ICA، همانند هر الگوریتم دیگری به رسیدن به جوابهای بهتر کمک می کند اما در مقابل زمان لازم برای اجرای برنامه را بالا می برد. در زیر بخش های مهم تنظیمات ایت نابع را می بینیم.
%% Algorithmic Parameter Setting
AlgorithmParams.NumOfCountries = 80; % Number of initial countries.
AlgorithmParams.NumOfInitialImperialists = 8; % Number of Initial Imperialists.
AlgorithmParams.NumOfAllColonies = AlgorithmParams.NumOfCountries – AlgorithmParams.NumOfInitialImperialists;
AlgorithmParams.NumOfDecades = 30;
AlgorithmParams.RevolutionRate = 0.3; % Revolution is the process in which the socio-political characteristics of a country change suddenly.
AlgorithmParams.AssimilationCoefficient = 2; % In the original paper assimilation coefficient is shown by “beta”.
AlgorithmParams.AssimilationAngleCoefficient = .5; % In the original paper assimilation angle coefficient is shown by “gama”.
AlgorithmParams.Zeta = 0.02; % Total Cost of Empire = Cost of Imperialist + Zeta * mean(Cost of All Colonies);
AlgorithmParams.DampRatio = 0.99;
AlgorithmParams.StopIfJustOneEmpire = false; % Use “true” to stop the algorithm when just one empire is remaining. Use “false” to continue the algorithm.
AlgorithmParams.UnitingThreshold = 0.02; % The percent of Search Space Size, which enables the uniting process of two Empires.
در میان کدهای، برنامه اصلی که باید اجرا شود با نام MainMLPusingICA مشخص شده است. شما کافی است این برنامه را باز کرده و فشردن F5 در متلب، آن را اجرا نمایید. برنامه تعداد تکرار های تعیین شده برای آموزش (تعداد دهه ها یا Decades در ICA) را طی کرده و نتایج نهایی، در انتهای برنامه، در پنجره اصلی متلب نشان داده خواهند شد.
%% Start of Program
clc
clear
close all
%% Input Output Data
Data = xlsread(‘Data.xls’);
X = Data(:,1:end-1);
Y = Data(:,end);
NumOfInputs = size(X,2);
NumOfOutputs = size(Y,2);
NumOfData = size(X,1);
%% Normalization
XN = X;
YN = Y;
MinX = min(X); MaxX = max(X);
MinY = min(Y); MaxY = max(Y);
for ii = 1:size(X,2)
XN(:,ii) = Normalize_Fcn(X(:,ii),MinX(ii) , MaxX(ii));
end
for ii = 1:size(Y,2)
YN(:,ii) = Normalize_Fcn(Y(:,ii),MinY(ii) , MaxY(ii));
end
%% Test and Train Data
TrPercent = 80;
DataNum = size(X,1);
TrNum = round(TrPercent * DataNum/100);
R = randperm(DataNum);
TrInx = R(1:TrNum);
TsInx = R(TrNum+1:end);
Xtr = XN(TrInx,:);
Ytr = YN(TrInx,:);
Xts = XN(TsInx,:);
Yts = YN(TsInx,:);
%% Network Structure
pr = [-1 1];
PR = repmat(pr,NumOfInputs,1);
Network = newff(PR,[5 NumOfOutputs],{‘tansig’ ‘tansig’});
Network.trainparam.goal = .0001;
%% Network Training
[Network BestCost] = TrainUsingICA_Fcn(Network,Xtr,Ytr);
%% Network Assessment
YtrNet = sim(Network,Xtr’)’;
YtsNet = sim(Network,Xts’)’;
MSEtr = mse(YtrNet-Ytr)
MSEts = mse(YtsNet-Yts)
CorrelatioTr = corrcoef(YtrNet,Ytr);
CorrelatioTs = corrcoef(YtsNet,Yts);
CorrelatioTr = CorrelatioTr(2)
CorrelatioTs = CorrelatioTs(2)
%% Display
figure
plot(Ytr,’-or’); hold on;
plot(YtrNet,’-sk’); hold off;
xlabel(‘Index’); ylabel(‘Output’)
title(‘Real and Network output for Train Data’);
legend(‘Real Output’,’Network Output’)
figure
plot(Yts,’-or’); hold on;
plot(YtsNet,’-sk’); hold off;
xlabel(‘Index’); ylabel(‘Output’)
title(‘Real and Network output for Test Data’);
legend(‘Real Output’,’Network Output’)
figure
t = -1:.1:1;
plot(t,t,’linewidth’,2)
hold on
plot(Ytr,YtrNet,’ok’)
xlabel(‘Real Output’); ylabel(‘Network Output’)
title(‘Network output vs. Real Output for Train Data’);
figure
t = -1:.1:1;
plot(t,t,’linewidth’,2)
hold on
plot(Yts,YtsNet,’ok’)
xlabel(‘Real Output’); ylabel(‘Network Output’)
title(‘Network output vs. Real Output for Test Data’);
نتیجه اجرای برنامه
یک نمونه از نتایج اجرای برنامه را در زیر می بینیم.
MSEtr =
0.0055
MSEts =
0.0057
CorrelatioTr =
0.9895
CorrelatioTs =
0.9863
در نهایت هم شکلهایی برای نشان دادن میزان موفقیت و شکست شبکه نشان داده شده اند. شکل زیر، نمودار خروجی واقعی و خروجی شبکه را برای دیتای آموزش بر حسب شماره اندیس داده ها نشان می دهد. هرچقدر این نمودارها روی هم بیفتند، نشان از کارایی شبکه می باشد.
حالت بزرگنمایی شده شکل فوق برای نشان دادن جزئیات در زیر آمده است.
یک روش دیگر برای نشان دادن تصویری کارایی شبکه عصبی، نمایش خروجی شبکه بر حسب خروجی واقعی می باشد. در ادامه این شکل را برای دیتای آموزش می بینیم. هرچقدر نقاط روی شکل به خط آبی نزدیکتر باشند، کارایی شبکه بیشتر می باشد.
شکل زیر، نمودار خروجی واقعی و خروجی شبکه را برای دیتای تست بر حسب شماره اندیس داده ها نشان می دهد. هرچقدر این نمودارها روی هم بیفتند، نشان از کارایی شبکه می باشد.
حالت بزرگنمایی شده شکل فوق برای نشان دادن جزئیات در زیر آمده است.
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.