資源簡介
適合在校大學生初步實驗使用,將此程序直接粘貼到Matlab的m文件中,便可直接運行,得到結果,本人已在博客中發表“與”運算實驗,神經網絡網址如https://blog.csdn.net/weixin_41529093/article/details/86713335,建議學有余力的同學不要下載,通過看我的博文,自己編出“異或”運算代碼
代碼片段和文件信息
function?Perception1_4_YiHuoYunSuan()
close?all?%關閉所有figure
rand(‘state‘sum(100*clock))?%隨機數種子用時鐘進行初始化
P=4;%訓練樣本數
%輸入訓練樣本:
X(:1)=[0;0];
X(:2)=[0;1];
X(:3)=[1;0];
X(:4)=[1;1];
X=[-1*ones(14);?X];%考慮閾值,設x0=-1
%輸入對應期望輸出:
d=[0?1?1?0];
%設置感知器參數
InDim=2;?%輸入樣本維數
OutDim=1;?%輸出維數
MaxTrainNumber=10;%最大訓練次數
Eta=1;%學習率
w1=[];?%創建w1矩陣
w2=[];?%創建w2矩陣
%感知器訓練
%權值初始化
W=rand(InDimOutDim);
%設置閾值
T=0.1;
WExpand=[T;?W];%合并閾值到權值
ErrHistory=[];
for?i=1:MaxTrainNumber?%循環MaxTrainNumber次
????for?p=1:P
????????net(p)=WExpand‘*X(:p);%計算樣本p的net值
????????o(p)=SinPoleTwoValue_f(net(p));%調用編輯好的變換函數,得到輸出值
????????Err(p)=o(p)-d(p);%計算誤差
????????WExpand=WExpand+Eta*(d(p)-o(p))*X(:p);%根據誤差更新權值
????end
????%計算總誤差
????Err_sum=sum(abs(Err));
?????%寫出權值w1w2的一維矩陣復合
w1=[w1?WExpand(2)];
w2=[w2?WExpand(3)];
????%記錄每次權值調整后的訓練誤差
????ErrHistory=[ErrHistory?Err_sum];?
????if?Err_sum==0?break?end?%判斷訓練是否停止
end
W=WExpand(2:3);
T=WExpand(1);
disp([‘The?final?Error?is:?‘num2str(Err_sum)?‘.‘]);
disp([‘The?curren?Epoch?is:?‘num2str(i)?‘.‘]);
評論
共有 條評論