Anfis-基于模糊推理的自适应神经网络程序(免费分享)
输出结果展示:
完整代码:
clear;close all;
gamma=0.75;%设定惯性因子
eps1=0.005;%设定停止训练的条件参数
m1=8;%设定隶属函数个数
m2=8;
a=-1;b=1;
w0=a+(b-a)*rand(1,m1*m2);%初始化权值阵
for i=1:2
switch i
case 1,beta=0.75;%设定学习率
otherwise,beta=0.25;
end
c=[2/7*(0:m1-1)-1;2/7*(0:m2-1)-1];%初始化Cij
sigma=0.1213*ones(2,m1);%初始化σij
w=w0;
mu=zeros(2,m1);%初始化隶属度层
alpha=zeros(1,m1*m2);%初始化规则层
alpha_=zeros(1,m1*m2);%初始化归一化层
delta2=zeros(2,m1);%初始化δ2
dw=zeros(1,m1*m2);%初始化权值变化量
dc=zeros(2,m1);%初始化c变化量
dsigma=zeros(2,m1);%初始化σij变化量
%----------------训练过程----------------%
err=1;%初始化误差
er=[];
counter=0;%统计训练步数
while(err>=eps1)
Par_E_w=zeros(1,m1*m2);%误差对权值阵的偏导数
Par_E_c=zeros(2,m1);%误差对c的偏导数
Par_E_sigma=zeros(2,m1);%误差对σ的偏导数
E=0;
for x1=-1:2/19:1
for x2=-1:2/19:1
yd=sin(pi*x1)*cos(pi*x2);%期望输出,导师信号
%正向传播
mu(1,:)=exp(-(x1-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层
mu(2,:)=exp(-(x2-c(2,:)).^2./sigma(2,:).^2);
s=zeros(2,m1,m1*m2);%初始化Sij
for m=1:m1
for n=1:m2
alpha((m-1)*m2+n)=min(mu(1,m),mu(2,n));%计算规则层(取小运算)
if mu(1,m)<=mu(2,n)
s(1,m,(m-1)*m2+n)=1;
end
if mu(1,m)>=mu(2,n)
s(2,n,(m-1)*m2+n)=1;
end
end
end
alpha_=alpha/sum(alpha);%计算归一化层
y=alpha_*w.';%计算网络输出
E=E+1/2*(yd-y)^2;%计算误差
%反向传播
delta5=yd-y;
delta4=delta5*w;
for k=1:m1*m2
delta3(k)=delta4(k)*(sum(alpha)-alpha(k))./sum(alpha)^2;
end
for m=1:2
for n=1:m1
delta2(m,n)=0;
for l=1:m1*m2
delta2(m,n)=delta2(m,n)+delta3(l)*s(m,n,l)*mu(m,n);
end
end
end
Par_E_w=Par_E_w-delta5*alpha_;%计算偏导数
Par_E_c(1,:)=Par_E_c(1,:)-2*delta2(1,:).*(x1-c(1,:))./sigma(1,:).^2;
Par_E_c(2,:)=Par_E_c(2,:)-2*delta2(2,:).*(x2-c(2,:))./sigma(2,:).^2;
Par_E_sigma(1,:)=Par_E_sigma(1,:)-2*delta2(1,:).*(x1-c(1,:)).^2./sigma(1,:).^3;
Par_E_sigma(2,:)=Par_E_sigma(2,:)-2*delta2(2,:).*(x2-c(2,:)).^2./sigma(2,:).^3;
end
end
num=20*20;
Par_E_w=Par_E_w/num;
Par_E_c=Par_E_c/num;
Par_E_sigma=Par_E_sigma/num;
dw=-beta*Par_E_w+gamma*dw;
dc=-beta*Par_E_c+gamma*dc;
dsigma=-beta*Par_E_sigma+gamma*dsigma;
w=w+dw;
c=c+dc;
sigma=sigma+dsigma;
counter=counter+1;
er(counter)=E/num;
err=E/num;
% if counter>1000
% break;
% end
end
%----------------测试过程----------------%
xx1=-1:2/19:1;
xx2=-1:2/19:1;
yd1=zeros(20,20);
for m=1:20
for n=1:20
yd1(m,n)=sin(pi*xx1(m))*cos(pi*xx2(n));%期望输出
mu(1,:)=exp(-(xx1(m)-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层
mu(2,:)=exp(-(xx2(n)-c(2,:)).^2./sigma(2,:).^2);
for k=1:m1 %计算规则层
for l=1:m2
alpha((k-1)*m2+l)=min(mu(1,k),mu(2,l));
end
end
alpha_=alpha/sum(alpha);%计算归一化层
yr(m,n)=alpha_*w.'; %计算网络输出
end
end
errorf1=1/2*(yd1-yr).^2;%计算误差
xxx1=-1:2/11:1;
xxx2=-1:2/11:1;
yd2=zeros(12,12);
for m=1:12
for n=1:12
yd2(m,n)=sin(pi*xxx1(m))*cos(pi*xxx2(n));%期望输出
mu(1,:)=exp(-(xxx1(m)-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层
mu(2,:)=exp(-(xxx2(n)-c(2,:)).^2./sigma(2,:).^2);
for k=1:m1 %计算规则层
for l=1:m2
alpha((k-1)*m2+l)=min(mu(1,k),mu(2,l));
end
end
alpha_=alpha/sum(alpha);%计算归一化层
yr2(m,n)=alpha_*w.'; %计算网络输出
end
end
errorf2=1/2*(yd1-yr).^2;%计算误差
%----------------绘图----------------%
figure(i);
sn=sprintf('β=%4.2f,γ=%4.2f',beta,gamma);
X=ones(size(xx2.'))*xx1;
Y=xx2.'*ones(size(xx1));
subplot(2,2,1);
surf(X,Y,yd1);
xlabel('x1');
ylabel('x2');
zlabel('期望的输出yd');
title(sn);
subplot(2,2,3);
surf(X,Y,yr);
xlabel('x1');
ylabel('x2');
zlabel('实际网络的输出yr');
title(sn);
subplot(2,2,2);
plot(er);
xlabel('训练步数');
ylabel('误差');
title(sn);
subplot(2,2,4);
surf(X,Y,errorf1);
xlabel('x1');
ylabel('x2');
zlabel('误差');
title(sn);
figure(i+2);
sn=sprintf('β=%4.2f,γ=%4.2f 泛化能力测试',beta,gamma);
X=ones(size(xxx2.'))*xxx1;
Y=xxx2.'*ones(size(xxx1));
subplot(2,1,1);
surf(X,Y,yd2);
xlabel('x1');
ylabel('x2');
zlabel('期望的输出yd');
title(sn);
subplot(2,1,2);
surf(X,Y,yr2);
xlabel('x1');
ylabel('x2');
zlabel('实际网络的输出yr');
title(sn);
beta
counter
end
Anfis-基于模糊推理的自适应神经网络程序(免费分享)相关推荐
- 基于自适应无迹卡尔曼滤波算法(AUKF)锂电池SOC估计,噪声系数自适应 Matlab程序
基于自适应无迹卡尔曼滤波算法(AUKF)锂电池SOC估计,噪声系数自适应 Matlab程序 仿真模型建模数据mat Sci一篇参考文献 ID:77100657373800632张徳帅123
- 【基于zynq的卷积神经网络加速器设计】(一)熟悉vivado和fpga开发流程:使用Vivado硬件调试烧写hello-world led闪烁程序实现及vivado软件仿真
HIGHLIGHT: vivado设计流程: note: 分析与综合 和 约束输入 可以调换顺序 [基于zynq的卷积神经网络加速器设计](一)熟悉vivado和fpga开发流程:使用Vivado硬件 ...
- Sugeno型(TS型)模糊推理系统及自适应神经网络的模糊推理系统(anfis)应用
Sugeno(TS)型模糊推理系统线性形式 TS系统特点:输出量是输入量的线性函数,与Mamdani控制器的最大不同是没有清晰化模块,因为它的推理结果就是清晰值.同时,用清晰地输出函数uj=pje+q ...
- 深度学习阅读导航 | 05 基于光照感知深度神经网络的多光谱数据融合行人检测
文章目录 摘要 一.引言 二.相关研究 2.1 可见光和热感行人检测 2.2 多光谱行人检测 三.我们的方法 3.1 建议模型概述 3.2 光照全连接神经网络(IFCNN) 3.3 光照感知双流深度卷 ...
- 在Autodesk应用程序商店发布基于浏览器的Web应用程序
你一定已经听说过Autodesk应用程序商店了,通过Autodesk应用程序商店,你可以免费下载或购买来自全球的优秀开发者发布的应用程序,来帮助你更快更方便的完成你的工作.而且作为开发者,您也可以在A ...
- 轻松构建基于 Serverless 架构的小程序
前言 自 2017 年第一批小程序上线以来,越来越多的移动端应用以小程序的形式呈现.小程序拥有触手可及.用完即走的优点,这大大降低了用户的使用负担,使小程序得到了广泛的传播.在阿里巴巴,小程序也被广泛 ...
- 基于VTK的MFC应用程序开发(2)
基于VTK的MFC应用程序开发(2) 分类: VTK应用示例 2013-03-29 13:03 6647人阅读 评论(18) 收藏 举报 MFCVTK图像重采样 目录(?)[+] 现在基于VTK的MF ...
- input自适应_【正点原子FPGA连载】第十一章基于OV5640的自适应二值化实验-领航者ZYNQ之HLS 开发指南...
1)摘自[正点原子]领航者ZYNQ之HLS 开发指南 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手 ...
- julia有 pytorch包吗_用 PyTorch 实现基于字符的循环神经网络 | Linux 中国
导读:在过去的几周里,我花了很多时间用 PyTorch 实现了一个 char-rnn 的版本.我以前从未训练过神经网络,所以这可能是一个有趣的开始. 本文字数:7201,阅读时长大约: 9分钟 htt ...
最新文章
- 获取一个对象的属性/属性值,以及动态给属性赋值
- ZedGraph在Web中的使用
- MySQL ifnull()函数
- div动态消失的动画效果
- keepalived 和 zookeeper的区别
- ToString函数用法
- php递归返回值只有第一次的结果,php递归函数出现返回值问题的解决
- 关于惠普打印机可以打印但是无法扫描的问题
- linux下virtualbox安装win7虚拟机无法调整分辨率
- JAVA 接入微信扫码(Native)支付
- C#Mysql学生信息管理系统
- qbo_listen编译问题
- matlab计算斜方差_利用matlab进行协方差运算
- 气象雷达地物杂波产生的原因
- 程序员必备的chrome插件:体验极佳的CSDN插件
- No connection could be made because the target machine actively refused it 192.168.131.196:1888
- Linux操作系统知识点(上)
- eMMC工作模式 - 超详细原理讲解
- ASP.NET美容店管理系统 程序+文档
- 总结29 WEB服务器中HTTP的Request对象和BeanUtils之应用