CMAC小脑模型人体行走姿态识别算法Matlab仿真

1.软件版本

matlab2019a

2.本算法理论知识

CMAC最大特点是局部逼近,因此它具有特殊的结构。

【CMAC】基于CMAC小脑模型的人体行走姿态识别算法仿真_神经网络

如上图,假设输入是二维,即X=(x1,x2)X=(x1,x2),x1,x2∈[0,5]x1,x2∈[0,5](即使不是也可以先标准化,[0,5][0,5]不是固定的,可以是其他,本文只是为了好理解而使用这个范围)。

1)每一维的输入xixi都具有层mm和块nbnb的概念(注意,这个层的意思和一般神经网络层的意思不一样)。在图中Tier是层的意思,也就是每一维具有m=4m=4层,每层有nb=2nb=2块,例如第一层Tier1具有两个块A、B。根据mm和nbnb确定每一维等分切片的个数,即m⋅(nb−1)+1m⋅(nb−1)+1,例如上图中,每维被切分为4*(2-1)+1=5等份。

2)输入的维度之间,相同的层所激活的块联合起来对应一个权值地址空间。如上图,当前X=(3.5,3.3)X=(3.5,3.3),x1x1在不同层激活的块是B、D、F、G,x2x2是b、d、f、g,此时所对应的权值索引是Bb、Dd、Ff、Gg,把这4个权值加起来就是输出。由此可以看出,有多少层就激活多少个权值。同时,不存在同维度块联合、不同维度不同层块联合的情况,也就是说不存在AB、AC、Ad等情况。由此算来,可能使用到的权值个数为m⋅nbnm⋅nbn,nn为输入的维度。

3)一般CMAC网络的整体构架如下图,第一层是输入层;第二层是虚拟联想空间,即对应上图的Aa、Ab、Ba、Bb……;第三层是物理存储空间,即根据第二层给出的索引找到对应的权值;第四层即输出层。

4)如果输入维度很大,根据m⋅nbnm⋅nbn,权值个数指数增长,然而也许只有少部分的权值被使用(有些权值从来没被激活),所以可以使用哈希表方法存储权值,减小无用空间的开支。

5)权值更新公式为
wt+1=wt+α/m⋅ewt+1=wt+α/m⋅e
αα为学习率,mm是层的个数,ee为样本真值与网络预测的误差,只有激活的权值被更新。其实可以把mm拿掉,看成使用一般神经网络的梯度下降法。


3.部分源码

function [Weight,Error,Ypre2] = func_CMAC_train(x,y,Iters,Learn_rate,Goals);[R,C]     = size(x);
%最小值Vmin      = 0*ones(1,C);%最大值Vmax      = 1*ones(1,C);%位数Xwidth    = numel(x(:,1));
%量化Qlen      = 200;%S空间S_space   = [1:Qlen];%用于训练的样本个数kk        = 1;Len_train = kk*R;
%误差Error     = [];%状态关联单元个数Nuints1   = 7;%相同关联单元个数Nuints2   = 4;
%总关联单元数Nuints_all= Qlen*Nuints1-(Qlen-1)*Nuints2;%权值Weight    = zeros(C,Nuints_all);
%获取训练样本P_train=zeros(Len_train,C);T_train=zeros(Len_train,1);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    i    for j=1:Len_train        %量化S空间        for jj = 1:C            
S_idx           = floor((P_train(j,jj)-Vmin(jj))/(Vmax(jj)-Vmin(jj))*(Qlen-1)) + 1;            
W_idx(jj)       = (S_idx-1)*(Nuints1-Nuints2)+1;            %输出             
T_predict(jj,j) = sum(Weight(jj,W_idx(jj):W_idx(jj)+Nuints1-1));           end                
for jj = 1:C            %CMAC权值更新            for k=W_idx(jj):W_idx(jj)+Nuints1-1                 
Weight(jj,k) = Weight(jj,k) + P_train(j,jj)/sum(P_train(j,:))*Learn_rate * (T_train(j)-sum(T_predict(:,j))); 
end         end    end        error = 0;    for j=1:Len_train        
error = error + abs(T_train(j)-sum(T_predict(:,j)));        
Ypre(j) = sum(T_predict(:,j));    end    Error(i)=error; endYpre2=Ypre(1:kk:end);1.2.3.4.5.6.7.8.9.10.11.
12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.
47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.




function Y_cmac2 = func_CMAC_test(x,Weight);[R,C]     = size(x);%位数Xwidth = numel(x(:,1));
Vmin   = 0*ones(1,C);Vmax   = 1*ones(1,C);%量化等级Qlen   = 200;Nuints1= 7; 
Nuints2= 4;for i=1:Xwidth    for jj = 1:C        
S_space   = floor((x(i,jj)-Vmin(jj))/(Vmax(jj)-Vmin(jj))*(Qlen-1))+1;        
W_space   =(S_space-1)*(Nuints1-Nuints2)+1;        
Y_cmac(jj,i) = sum(Weight(jj,W_space:W_space+Nuints1-1));    
end    Y_cmac2(i) = sum(Y_cmac(:,i));end1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.

4.仿真结论

【CMAC】基于CMAC小脑模型的人体行走姿态识别算法仿真_CMAC_02


【CMAC】基于CMAC小脑模型的人体行走姿态识别算法仿真_神经网络_03


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空