%功能:1-K-1网络逼近正弦曲线,采取多点逼近学习
%版本号:v2.4
%作者:陈颖频
%版权:闽南师范大学
%时间:2015.10.9
clear all;
clc;
K=5;
w_ij=ones(K,1);w_jk=ones(K,1);h_theta=ones(K,1);
for i=1:K
w_ij(i)=w_ij(i)*rand(1,1);
w_jk(i)=w_jk(i)*rand(1,1);
h_theta(i)=h_theta(i)*rand(1,1);
end
out_theta=.2; %输出层阈值
e2=0;
a1=0.1;a2=0.1;M=40;
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
o=0;
for k=1:60000 %训练次数
for m=1:M
p(m)=2*pi*m/M; yp(m)=sin(p(m));
h=tanh(w_ij*p(m)+h_theta).'; %隐层输出
y(m)=tanh(h*w_jk+out_theta); %输出层输出
o=o+[(yp(m)-y(m))^2]/(2*M); %当次训练总样本误差
deta_k=0.5*(1-y(m)^2)*(yp(m)-y(m));%计算输出层误差反传信号
out_theta=out_theta+a2*deta_k;
for i=1:K
w_jk(i)=w_jk(i)+a2*deta_k*h(i);
end
for i=1:K
deta_j=(deta_k)*0.5*[1-h(i)^2];
w_ij(i)=w_ij(i)+a2*deta_j*p(m);
h_theta(i)=h_theta(i)+a1*deta_j;
end
end
o
if o<0.02, a1=0.006;a2=0.006; end;
o=0;
end
%测试样本序列
for m=1:M
p(m)=2*pi*m/M;
h=tanh(w_ij*p(m)+h_theta).'; %隐层输出
out(m)=tanh(h*w_jk+out_theta); %输出层输出
end