اطلاعیه

Collapse
No announcement yet.

تحلیل یک برنامه متلب که برای شبکه عصبی نوشته شده

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تحلیل یک برنامه متلب که برای شبکه عصبی نوشته شده

    سلام دوستان.
    متاسفانه آشنایی با شبکه های عصبی (مخابرات) ندارم. یه برنامه هست که یکی از دوستان نوشته اما همه قسمت هاشو نفهمیدم . اگه امکانش هست قسمت های design و test و Ml Algorithm رو توضیح بدید، گمونم بدرد دوستان دیگه هم بخوره
    عنوان شبیه سازی اینه :
    هدف از این شبیه سازی تشخیص دو کلاس شامل الگوهای تصادفی با توزیع گوسی با استفاده از شبکه عصبی چند لایه پرسپترون با قاعده یادگیری پس انتشار خطا است.
    m1 = [0,0] , variance= 1 کلاس اول
    m2 = [2,0] , variance = 4 کلاس دوم
    m همون میانگین هست .
    500 الگوی آموزشی ( 250 لگو از هر کلاس ) و 500 الگوی آزمایشی ( 250 الگو از هر کلاس ) تولیدکنید. در صد طبقه بندی صحیح را در شرایط مختلف مورد بررسی قرار دهید
    -1 شبکه عصبی با یک لایه پنهان و تعداد نرون های مختلف در لایه پنهان با یک ضریب یادگیری و ضریب ممان صفر و تعداد دوره یادگیری یکسان
    -2 شبکه عصبی با یک لایه پنهان 10 نر ون در لایه پنهان با یک ضریب یادگیری و ضریب ممان صفر و تعداد دوره یادگیری مختلف
    -3 شبکه عصبی با یک لایه پنهان و 10 نرون در لایه پنهان با ضریب یادگیری مختلف و ضریب ممان صفر
    4 شبکه عصبی با یک لایه پنهان و 10 نرون در لایه پنهان با یک ضریب یادگیری و ضریب ممانهای مختلف
    5-شبکه عصبی با دو لایه پنهان، هر یک با 10 نرون با یک ضریب یادگیری و ضریب ممان صفرانجام دهید.
    -6 شبکه عصبی با مشخصات حالت دوم را با قاعده یادگیری delta-delta انجام دهید.
    -7 همچنین این الگوها را با استفاده از روش Maximum-likelihood Classifier طبقه بندی کنید
    و رسم منحی برای حالت های 2 و 3 و 4


    حالا اینم برنامه ای که یکی از همکلاسیا نوشته :
    کد:
    clc,clear all;close all;
    mu1 = [0 0]';
    sigma1 = 1;
    mu2 = [2 0]';
    sigma2 = 2;
    Num_Input=500;
    Ro = 2;     %Row
    Cl = Num_Input; %Coulmn
    Num_Epoch =100; %Num of Epochs
    mu1 = repmat(mu1,[1 Cl]);
    mu2 = repmat(mu2,[1 Cl]);
    class1 = normrnd(mu1,sigma1,Ro,Cl);
    class2 = normrnd(mu2,sigma2,Ro,Cl);
    
    
    % fclose(fid1);fclose(fid2);
    if(1)
      figure;
      plot(class1(1,:),class1(2,:),'o');
      figure;
      plot(class2(1,:),class2(2,:),'r*');
      figure;
      plot(class1(1,:),class1(2,:),'o');hold on;
      plot(class2(1,:),class2(2,:),'r*');
      axis([-4 10 -6 6]);
    end
    %% ==============  Design  ================
    Input1 = [ones(1,floor(Num_Input/2))*-1;class1(1:floor(Num_Input/2))];
    Num_Neuron = 10;
    WL1 = 0.1 * rand(3,Num_Neuron)-.05;
    WL2 = 0.1 * rand(Num_Neuron,1)-.05;
    D=[0,1];   % for Phi=1/1+exp(-V)
    Eta = 0.6;  % Rate of Learning
    Alpha=0.2;  % Momentom
    Del_wl2=0.1 * rand(Num_Neuron,1)-0.05;
    Del_wl1=0.1 * rand(Num_Neuron,3)-0.05;
    d1=zeros(1,floor(Num_Input/2));d2=zeros(1,floor(Num_Input/2))+1;
    data = [ones(1,Num_Input)*-1;class1(:,1:floor(Num_Input/2)),class2(:,1:floor(Num_Input/2));d1,d2];
    Learning_Curve = zeros(Num_Epoch,1);
    h = waitbar(0,'Please wait...');
    for Epoch=1:Num_Epoch
      NN = round(Epoch/Num_Epoch*100);
      waitbar(NN/100);
      Index = randperm(Num_Input);
      Ave_Err=0;
      for i=1:Num_Input
        Idx = Index(i);
        % ====== Forward =========
        V1 = WL1' * data(1:3,Idx);
        Y1=Phi(V1);
        V2 = WL2' * Y1;
        Y2=Phi(V2);
        e=data(4,Idx)-Y2;
        Ave_Err = Ave_Err + e^2;
    
        % ======= Back ward ===========
        Grad1 = e*Y2.*(1-Y2);
        Del_wl2=Alpha*Del_wl2+Eta*Grad1*Y1;
        WL2=WL2+Del_wl2;
    
        Grad2 = Grad1*WL2.*Y1.*(1-Y1);
        Del_wl1=Alpha*Del_wl1+Eta*Grad2*data(1:3,Idx)';
        WL1=WL1+Del_wl1';
      end
      Learning_Curve(Epoch) = Ave_Err/Num_Input;
    end
    close(h) 
    MSE = sum(Learning_Curve)/Num_Epoch
    figure(1);
    plot(1:Num_Epoch,Learning_Curve)
    hold on; grid on;
    xlabel('Number of Epochs')
    ylabel('MSE over Epoch')
    
    %% ========================= Test ============================
    Test_Input = [ones(1,Num_Input)*-1;class1(:,floor(Num_Input/2)+1:Num_Input),class2(:,floor(Num_Input/2)+1:Num_Input);d1,d2];
    
    Error = 0;
    for i=1:Num_Input
      % ====== Forward =========
      V1 = WL1' * Test_Input(1:3,i);
      Y1=Phi(V1);
      V2 = WL2' * Y1;
      Y2=Phi(V2);
      e=abs(Test_Input(4,i)-Y2);
      if(e>0.5)
        Error = Error+1;
      end
    
    end
    Ec = (Num_Input-Error)/Num_Input*100
    
    %% = ================ Ml Algorithm =================
    mu1 = [0 0]';
    sigma1 = 1;
    mu2 = [2 0]';
    sigma2 = 2;
    r = sqrt(sigma1^2*sigma2^2*(norm(mu1+mu2)^2/(sigma2^2-sigma1^2) + 4*log(sigma2/sigma1))/(sigma2^2-sigma1^2) );
    Xc = (sigma2^2*mu1 - sigma1^2*mu2)/(sigma2-sigma1);
    Err_ML=0;
    for i=1:Num_Input
      if( norm(Test_Input([2 3],i) - Xc )>r ) % Select Class 2
        if(Test_Input(4,i) == 0)
          Err_ML=Err_ML+1;
        end
      else % Select Class 1
        if(Test_Input(4,i) == 1)
          Err_ML=Err_ML+1;
        end
      end
    end
    Ec_ML = (Num_Input-Err_ML) /Num_Input*100

    برای اجرا باید یه m-file کنار برنامه داشته باشین به اسم Phi که برنامش اینه :
    کد:
    function [Y]= Phi(V)
    Y = 1 ./ ( 1 + exp(-V) );
    % a = 1.7;
    % b = 2/3;
    % Y = a * tanh( b * V);
لطفا صبر کنید...
X