【CMAC小脑】CMAC逼近sin(t)函数的训练和测试
生活随笔
收集整理的這篇文章主要介紹了
【CMAC小脑】CMAC逼近sin(t)函数的训练和测试
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
% CMAC逼近sin(t)函數clear all;
close all;
clc;
t=[0:2*pi/360:2*pi];% 自變量t
y=sin(t);%因變量y
min_in=min(t);%輸入自變量最小值
max_in=max(t);%輸入自變量最大值
n=numel(t);%自變量的位數
size_n=360;%量化等級,越大精度越高
s=[1:size_n];%S空間,輸入量化后的離散空間
train_num=180;%用于訓練的樣本個數
maxgen=50;%最大迭代次數
mse=zeros(1,maxgen);%均方誤差向量
gen=0;%實際迭代次數
eta=1.0;%學習率η
error_goal=0.00001;%誤差精度要求
A_star=6;%每個狀態對應的關聯單元個數
common_unit=5;%相鄰關聯組有相同關聯單元個數
a_num=size_n*A_star-(size_n-1)*common_unit;%關聯單元總數
a=ones(1,a_num);% a 向量
w=zeros(1,a_num);% 權值向量
% 獲取訓練樣本 的輸入和輸出
train_in=zeros(1,train_num);%訓練樣本輸入
train_out=zeros(1,train_num);%訓練樣本輸出
for i=1:train_numtrain_in(i)=t(floor((i-1)*n/train_num+1));train_out(i)=y(floor((i-1)*n/train_num+1));
end
% 開始訓練樣本
for i=1:maxgengen=i;for j=1:train_nums_seq=floor((train_in(j)-min_in)/(max_in-min_in)*(size_n-1))+1;%量化空間S的序號w_seq=(s_seq-1)*(A_star-common_unit)+1;%權值序號ye(j)=sum(w(w_seq:w_seq+A_star-1));%實際輸出 for k=w_seq:w_seq+A_star-1 %修正權值w(k)=w(k)+eta*(train_out(j)-ye(j))/A_star;end enderror=0;for j=1:train_numerror=error+(train_out(j)-ye(j))^2;endmse(i)=error;if error<error_goal %誤差達到目標值,退出訓練break;end
end
%{
%對權值向量進行插值處理
for i=1:a_numif w(i)==0%找到第一個不為零的j=i;while(w(j)==0 && j<a_num)j=j+1;endif j<a_numfor k=i:j-1w(k)=w(j)-(k-i)*(w(j+1)-w(j));endendend
end
%}
%檢驗訓練好的網絡
for i=1:ns_seq=floor((t(i)-min_in)/(max_in-min_in)*(size_n-1))+1;%S序號w_seq=(s_seq-1)*(A_star-common_unit)+1;%權值序號yp(i)=sum(w(w_seq:w_seq+A_star-1));
end% 繪圖
figure(1);
plot(t,y,'b',t,yp,'r--','linewidth',2);%原曲線和網絡輸出曲線
title('實際輸出和網絡輸出對比');xlabel('t');ylabel('y-t,yp-t');
figure(2);
plot(train_in,train_out,'linewidth',2);
title('訓練樣本曲線');xlabel('train_in');ylabel('train_out');
figure(3);
plot([1:gen],mse(1:gen),'linewidth',2);
title('均方誤差誤差曲線');xlabel('Generation');ylabel('Mean Square Error');
?
?
總結
以上是生活随笔為你收集整理的【CMAC小脑】CMAC逼近sin(t)函数的训练和测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【OMP信道估计】基于OMP压缩感知的信
- 下一篇: 【维纳滤波】通过MATLAB自带的维纳滤