基于CMAC小脑模型的数据训练和预测matlab仿真

目录

一、理论基础

二、核心程序

三、仿真结论


一、理论基础

        J.S.Albus于20世纪70年代提出了CMAC,即小脑模型关节控制器,它由含局部调整,相互覆盖接受域的神经元组成。它是模拟人的小脑的一种学习结构,是基于表格查询式输入输出的局部神经网络模型,提供了一种从输入到输出的多维非线性映射能力。小脑模型关节控制器(CMAC)是由含局部调整,相互覆盖接受域的神经元组成,J.S.Albus于20世纪70年代提出了CMAC,它是模拟人的小脑的一种学习结构,是基于表格查询式输入输出的局部神经网络模型,提供了一种从输入到输出的多维非线性映射能力。由于CMAC具有学习速度快、泛化能力强、易于实现、不存在局部极小点等特点,被广泛地应用于对实现性要求较高的控制系统中,作为辩识器和控制器,并取得了较好的效果。

        CMAC的基本原理为:对于每个输入,中只有个单元为1,而其余的均为0,因此是一个稀疏矩阵。哈希编码是压缩稀疏矩阵的常用技术,具体方法是通过一个产生随机数的程序来实现的。以的地址作为随机数产生的程序的变量,产生的随机数作为的地址。由于产生的随机数限制在一个较小的整数范围内,因此远比小得多。显然,从到的压缩是一种多对少的随机映射。在中,对每一个样本有个随机地址与之对应,个地址存放的权值通过学习得到,其累加和即作为CMAC的输出。其表达式为: 

       CMAC算法中结果输出阶段从CMAC存储单元产生一实际输出,学习过程根据期望输出与实际输出的误差大小来更新CMAC存储单元中的权值。在常规CMAC算法中误差被平均分配到所有被激活的存储单元。设为某一状态,是经过第次迭代后存储在第个存储单元中的权值。常规CMAC更新算法为:

        从某种意义上来说,CMAC与模糊逻辑不但是相互补充的,而且也是相通的、可以结合的。首先,利用连接主义表达的模糊逻辑控制器必然要引入学习机制,也带来了两者结合的诸多优点,如存储容量的减小,泛化能力的提高以及连接主义结构的容错性等。其次,CMAC的分布表达式中,一个值由散布于许多计算单元的活性模式表示,每个计算单元有涉及许多不同值的表达,因此每个计算单元都有一个感受野,即它所表达的所有值的集合,这相当于每个计算单元都对应一个模糊集合,或者说感受野相当于隶属函数。这正是它们能够相结合的一个基础。因此,基于模糊的CMAC也不断地被广大学者所关注,有着很好的应用前景。

          神经网络可分为全局逼近神经网络和局部逼近神经网络,如果网络的一个和多个连接权系数或自适应可调参数,在输入空间的每一点对任何一个输出都有影响,则称该神经网络为全局逼近网络。如BP网络,每一次样本学习都需要重新调整网络的所有权值,收敛速度慢,易陷入局部最小,很难满足控制系统的实时性要求;若对输入空间的某个局部区域,只有少数几个连接权影响网络的输出,则称该网络为局部逼近网络,从而使局部逼近网络具有学习速度快的优点。CMAC、RBF以及某些模糊神经网络是局部逼近网络。
CMAC比其他神经网络的优越性体现在:
(1)CMAC神经网络把信息存储在局部的结构上,在保证函数逼近的前提下,学习速度快。
(2)CMAC函数逼近器对学习数据出现的次序不敏感,因此,CMAC在时变、非线性系统控制中得到广泛应用。
(3)CMAC结构简单,易于硬件实现和软件实现。
因此,CMAC已被越来越多的学者所关注,并得到广泛的应用。

二、核心程序

function [Weight,Error] = func_CMAC_train(x,y,Iters,Learn_rate,Goals);

%最小值
Vmin      = min(x);
%最大值
Vmax      = max(x);
%位数
Xwidth    = numel(x);
%量化
Qlen      = 360;
%S空间
S_space   = [1:Qlen];
%用于训练的样本个数
Len_train = 180;
%误差
Error     = [];
%状态关联单元个数
Nuints1   = 6;
%相同关联单元个数
Nuints2   = 5;
%总关联单元数
Nuints_all= Qlen*Nuints1-(Qlen-1)*Nuints2;
%权值
Weight    = zeros(1,Nuints_all);

%获取训练样本
P_train=zeros(1,Len_train);
T_train=zeros(1,Len_train);
for i=1:Len_train
    P_train(i) = x(floor((i-1)*Xwidth/Len_train+1));
    T_train(i) = y(floor((i-1)*Xwidth/Len_train+1));
end

%训练
for i=1:Iters
    for j=1:Len_train
        %量化S空间
        S_idx        = floor((P_train(j)-Vmin)/(Vmax-Vmin)*(Qlen-1)) + 1;
        W_idx        = (S_idx-1)*(Nuints1-Nuints2)+1;
        %输出 
        T_predict(j) = sum(Weight(W_idx:W_idx+Nuints1-1));     
        %CMAC权值更新
        for k=W_idx:W_idx+Nuints1-1 
            Weight(k) = Weight(k) + Learn_rate * (T_train(j)-T_predict(j)) / Nuints1;
        end        
    end
    
    error = 0;
    for j=1:Len_train
        error = error + (T_train(j)-T_predict(j))^2;
    end
    
    Error(i)=error;
    %退出训练
	if error<Goals 
       break;
    end    
end

function Y_cmac = func_CMAC_test(x,Weight);
%位数
Xwidth = numel(x); 
Vmin   = min(x);
Vmax   = max(x);
%量化等级
Qlen   = 360;
Nuints1= 6; 
Nuints2= 5;
for i=1:Xwidth
    S_space   = floor((x(i)-Vmin)/(Vmax-Vmin)*(Qlen-1))+1;
    W_space   =(S_space-1)*(Nuints1-Nuints2)+1;
    Y_cmac(i) = sum(Weight(W_space:W_space+Nuints1-1));
end
A05-73

三、仿真结论

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值