【CMAC小脑网络】基于CMAC的目标分类matlab仿真

1.软件版本

MATLAB2021a
2.本算法理论知识

程序流程如下所示:

【CMAC小脑网络】基于CMAC的目标分类matlab仿真_第1张图片

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

 

其中,为第j个存储单元的权值,若激活,则其值为1,否则为0,只有个存储单元对输出有影响。相近的输入激活的存储单元有交叠,产生相近的输出,不相近的输入将产生不相近的输出。对应的误差表达式为:

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

 

为状态s的期望输出,为状态s的实际输出,为学习常数。

 3.核心代码

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

 4.操作步骤与仿真结论

【CMAC小脑网络】基于CMAC的目标分类matlab仿真_第2张图片

 5.参考文献

[1]Zhou Xudong, Wang Guodong, 周旭东,等. Fuzzy CMAC Neural Network模糊小脑模型神经网络[J]. 自动化学报, 1998, 24(2):173-178.

A05-73
6.完整源码获得方式

方式1:微信或者QQ联系博主

方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码

你可能感兴趣的:(MATLAB,CMAC,目标分类)