📄 whk_h.m
字号:
function main()
SamNum=500; %训练样本数
HiddenUnitNum=8; %隐节点数
EnsembleNum=5;
TrainSamIn=rand(2,SamNum)*2-1;%产生随机的训练样本输入
TrainSamOut=sign(TrainSamIn(1,:).*TrainSamIn(2,:));%得到训练样本输出
TestSamIn=[];
for x1=-1:0.05:1
for x2=-1:0.05:1
x=[x1;x2];
TestSamIn=[TestSamIn x];
end
end
TestSamOut=sign(TestSamIn(1,:).*TestSamIn(2,:));%得到测试样本输出
MaxEpochs=1000; %最大训练次数
lr=0.005; %学习率
EO=0.01; %目标误差
tp=[MaxEpochs,lr,EO];
AllTestNNOut=[];
for NetIndex=1:EnsembleNum
W1=0.1*rands(HiddenUnitNum,2); %输入层到隐层的初始权值
B1=0.1*rands(HiddenUnitNum,1); %隐节点初始偏移
W2=0.1*rands(1,HiddenUnitNum); %隐层到输出层的初始权值
B2=0.1*rands(1,1); %输出层初始偏移
[NewW1,NewB1,NewW2,NewB2,ErrHistory]=BackProp(W1,B1,W2,B2,...
TrainSamIn,TrainSamOut,tp);
TestNNOut=BPNetwork(NewW1,NewB1,NewW2,NewB2,TestSamIn);
AllTestNNOut=[AllTestNNOut;TestNNOut];
GXORDraw(TestSamIn,TestNNOut);
end
[xxx,TestSamNum]=size(TestSamOut);
AllTestSamOut=repmat(TestSamOut,EnsembleNum,1);
SubnetErrMat=abs(sign(AllTestNNOut)-AllTestSamOut)/2;
SubnetErrorRate=sum(SubnetErrMat')/TestSamNum
EnsembleOut=sign(sum(AllTestNNOut));
EnsembleErrorRate=sumsqr((TestSamOut-EnsembleOut)/2)/TestSamNum
GXORDraw(TestSamIn,EnsembleOut);
function[NewW1,NewB1,NewW2,NewB2,ErrHistory]=BackProp(W1,B1,W2,B2,...
SamIn,SamOut,tp)
%(参考附录A)
function GXORDraw(X,Y)
[xxx,TestSamNum]=size(Y);
figure
echo off
axis([-1,1,-1,1])
axis on
grid
xlabel('Input x1');
ylabel('Input x2');
hold on
for i=1:TestSamNum
x1=X(1,i);
x2=X(2,i);
if(Y(i)>0)
plot(x1,x2,'k*')
end
end
function SamOut=BPNetwork(W1,B1,W2,B2,SamIn)
[xxx,SamNum]=size(SamIn);
RepB1=repmat(B1,1,SamNum);
RepB2=repmat(B2,1,SamNum);
HiddenOut=tansig(W1*SamIn+RepB1);
SamOut=tansig(W2*HiddenOut+RepB2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -