Yahoo奇摩知識+將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+服務將會轉為唯讀模式。其他Yahoo奇摩產品與服務或您的Yahoo奇摩帳號都不會受影響。如需關於Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

匿名使用者
匿名使用者 發問時間: 電腦與網際網路軟體 · 1 0 年前

類神經系統的另個問題

以bp 解並模擬cos波型 以matlab 程式

1 個解答

評分
  • Polo
    Lv 5
    1 0 年前
    最佳解答

    圖片參考:http://tw.yimg.com/i/tw/blog/rte/smiley_1.gif

    剛好手上有一個剛跑完的BP,讓你參考一下:

    輸入訓練檔案為train.mat。跑完5000epochs後結果為:

    圖片參考:http://us.a2.yahoofs.com/users/43f488e1zecfd010f/2...

    程式內容如下:

    clear all;clc;format long;

    a=1;h1=10;o=1;learning_epoch=5000;

    learning_rate=0.1;alpha=0.05;

    load train.mat

    [m n]=size(train);

    no_learning=m;M=train;

    Wih=1-2*rand(a,h1);

    Who=1-2*rand(h1,o);

    Bh=1-2*rand(1,h1);

    Bo=1-2*rand(1,o);

    lastdWho=zeros(h1,o);

    lastdBo=zeros(1,o);

    lastdWih=zeros(a,h1);

    lastdBh=zeros(1,h1);

    fmse=fopen('learning_mse.dat','w');

    k=1;lastmse=0;

    while (k<= learning_epoch)

    tempWih=zeros(a,h1);

    tempBh=zeros(1,h1);

    tempWho=zeros(h1,o);

    tempBo=zeros(1,o);

    for no=1:no_learning%

    A(1:a)=M(no,1:a);

    Target(1:o)=M(no,a+1:n);

    %calculate

    Hout=logsig(A*Wih+Bh);

    Out=Hout*Who+Bo;

    error=Target-Out;

    %Backpropagating correction-sequential learning

    s2=-2*1*error;

    s1 = (1-Hout).*Hout.*(s2*Who');

    %Batch learning

    tempWho=tempWho+Hout'*s2;

    tempBo=tempBo+s2;

    tempWih=tempWih+A'*s1;

    tempBh=tempBh+s1;

    end

    dWho=alpha*lastdWho+learning_rate*tempWho/no_learning;

    dBo=alpha*lastdBo+learning_rate*tempBo/no_learning;

    dWih=alpha*lastdWih+learning_rate*tempWih/no_learning;

    dBh=alpha*lastdBh+learning_rate*tempBh/no_learning;

    Who=Who-dWho;

    Bo=Bo-dBo;

    Wih=Wih-dWih;

    Bh=Bh-dBh;

    sum_error=0;

    for no=1:no_learning

    A(1:a)=M(no,1:a);

    Target(1:o)=M(no,(a+1):n);

    Hout=logsig(A*Wih+Bh);

    Out=Hout*Who+Bo;

    error=Target-Out;

    sum_error=sum_error+sum(error*error');

    end

    MSE(k)=sum_error/o/no_learning;

    lastdWho=dWho;

    lastdBo=dBo;

    lastdWih=dWih;

    lastdBh=dBh;

    lastmse=MSE(k)

    fprintf(fmse,'%2.1f %8.5f \n',k,MSE(k));

    k=k+1;

    end

    fclose(fmse);

    2007-05-19 05:31:34 補充:

    輸入訓練檔案為train.mat,請自行撰寫程式產生。

    2007-05-21 03:33:22 補充:

    訓練5000epochs後結果為:

    http://us.a2.yahoofs.com/users/43f488e1zecfd010f/2...

    2007-05-21 03:37:39 補充:

    抱歉,圖檔不知何故消失,補充內容又無法將圖檔位置置入,如果你需要訓練後的圖檔EMAIL跟我要,謝謝。

    參考資料: 自己, 自己
還有問題?馬上發問,尋求解答。