matlab rbf手写

clc;clear;format long;
trainD=0:0.1:10;
outD=sin(trainD).*trainD;
outD=outD';
dnum=length(trainD);
%初始化参数学习率
lr_w0=0.1;%权值
lr_c0=0.1;%中心点
lr_sigma0=0.1;%神经节点的方差参数
iters=10000;%最大迭代次数
minE=1e-2;%误差小于他就停止
cnum=150;%神经元个数
c=linspace(0,10,cnum);%神经节点均匀分配在范围内
sigmas=ones(cnum,1)*(c(end)-c(1))/sqrt(2*cnum);%公式,所有sigma都取这个数,训练的好
wmat=rand(cnum,1);%权值随机取
ys=[];%存结果
errs=[];%存误差
for i=1:iters
    decay=1/(1+i*2/iters);%学习率不断下降
    lr_c=lr_c0*decay;
    lr_w=lr_w0*decay;
    lr_sigma=lr_sigma0*decay;
    %首先计算每个样本对每个神经节点距离
    dists=zeros(cnum,dnum);
    for j=1:cnum
        dists(j,:)=sqrt((bsxfun(@minus,trainD,c(j)').^2)');
    end
    gauss=zeros(cnum,dnum);%径向基函数输出(隐层输出)
    for j=1:cnum
        gauss(j,:)=exp(-dists(j,:)./(2*sigmas(j)^2));
    end
    y=gauss'*wmat;
    ys=[ys,y];
    err=y-outD;
    errs=[errs,err];
    mse=sum(err.^2)/(2*dnum);
    if sum(mse)<minE
        break
    end
    dw=zeros(1,cnum);
    dc=0;
    for j=1:cnum
        dw(j)=gauss(j,:)*err/dnum;
    end
    for k=1:dnum
        dc=dc+err(k)*(gauss(j,k)*(trainD(k)-c(j))');
    end
    ds=((gauss.*dists)*err.*wmat)./(sigmas.^3)/dnum;
    dc=wmat./(sigmas.^2)*dc;
    wmat=wmat-lr_w*dw';
    c=c-lr_c*dc';
    sigmas=sigmas-lr_sigma*ds;
end
plot(trainD,outD);
set(gca,'YLim',[-10 10]);
hold on;
fig1=plot(trainD,y(:,1));
for i=1:size(ys,2)
    fig1.YData=ys(:,i);
    pause(0.05);
    legend(num2str(i));
end
figure();
plot(1:length(errs),errs);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值