声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2667|回复: 6

[综合讨论] ANFIS命令建立模糊神经网络输出范围的设定问题

[复制链接]
发表于 2006-9-28 16:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
由genfis1根据训练数据生成模糊推理系统隶属度函数曲线后
在用anfis函数进行神经网络模糊建模
我的问题是,对于这样建立好的网络,我再输入新的数据后,输出就会产生问题
建立的网络,我规定的输入输出数据范围都是[0 1]
可输入新的数据后,输出范围就变为[-1 0.8]了,可我想要的范围是[0 1],这是怎么回事呢?请高手指教~
btw:输入的数据我进行了规一化处理
回复
分享到:

使用道具 举报

发表于 2006-9-29 02:12 | 显示全部楼层
最好给一下代码
 楼主| 发表于 2006-9-29 10:59 | 显示全部楼层
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%实现特定复杂输入/输出关系的模糊推理系统
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%数据点数为numPts
numPts=time_length*6;
y=result1(t0);
data=[sound_energy' shake_energy' y];  %整个数据集
trnData=data(1:2:numPts,:);  %训练数据集合
chkData=data(2:2:numPts,:);  %检验数据集合
%绘制训练数据和检验数据的分布曲线
figure(1);
plot(trnData(:,1:2),trnData(:,3),'o',...
     chkData(:,1:2),chkData(:,3),'kx')
%建立用于模糊建模的Sugeno型模糊推理系统
%采用genfis1函数直接由训练数据生成模糊推理系统
numMFs1=5;  %隶属度函数个数
numMFs2=5;
mfType1='gauss2mf';  %隶属度函数类型
mfType2='gauss2mf';
fismat=genfis1(trnData,[numMFs1 numMFs2],char(mfType1,mfType2),'constant');
%绘制模糊推理系统的初始隶属度函数
figure(2);
[x,mf]=plotmf(fismat,'input',1);
subplot(2,1,1),plot(x,mf);
xlabel('input 1 (pimf)');
title('初始隶属度函数')
[x,mf]=plotmf(fismat,'input',2);
subplot(2,1,2),plot(x,mf);
xlabel('input 2 (pimf)');
 楼主| 发表于 2006-9-29 11:14 | 显示全部楼层
这是第一段程序,用来建立Sugeno型模糊推理系统,是一个两输入,一输出的模糊神经网络
其中sound_energy'  和 shake_energy' 是输入量,已经经过归一化处理,y也是一个在[0  1]范围内的参数
训练出的初始隶属度函数就是一个guass2mf函数(不知道为什么,我程序中调不出guass高斯函数,只好用这个函数代替)
 楼主| 发表于 2006-9-29 11:16 | 显示全部楼层
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%使用anfis函数进行给定数据的神经网络模糊建模
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
numEpochs=40;   %训练次数为40
[fismat1,trnErr,ss,fismat2,chkErr]=anfis(trnData,fismat,numEpochs,NaN,chkData);

%计算训练后神经网络模糊系统的输出与训练数据的均方根误差
%trnData2= reshape(trnData,45,2);
trnOut=evalfis(trnData(:,1:2),fismat1);
trnRMSE=norm(trnOut-trnData(:,3))/sqrt(length(trnOut));
%绘制训练过程中均方根误差的变化情况
epoch=1:numEpochs;
figure(3);
plot(epoch,trnErr,'o',epoch,chkErr,'kx')
%绘制训练过程中的最小二乘误差变化情况,如果训练数据和核对数据的误差同时减小,模型才是有效的
hold on;
plot(epoch,[trnErr chkErr]);
hold off
%绘制训练过程中步长的变化情况
figure(4)
plot(epoch,ss,'-',epoch,ss,'ko')
xlabel('epochs'),ylabel('ss'),title('Step Sizes')
%下面绘制训练后面模糊推理系统的隶属度函数曲线
figure(5)
[x,mf]=plotmf(fismat1,'input',1);
subplot(2,1,1),plot(x,mf);
xlabel('input 1 (pimf)');
title('训练后隶属度函数')
[x,mf]=plotmf(fismat1,'input',2);
subplot(2,1,2),plot(x,mf);
xlabel('input 2 (pimf)');

writefis(fismat1,'fuzzyrule');
 楼主| 发表于 2006-9-29 11:26 | 显示全部楼层
这是第二段程序,用anfis函数进行给定数据的神经网络模糊建模
训练后的隶属度函数就是原来的guass2mf函数的中心和宽度发生的变化,我认为是对模糊规则进行了修正,产生的新的隶属度函数,这样是不是就达到了训练网络的目的呢(?)
不过好像对输入1的隶属度变化比较明显,输入2的隶属度基本没有什么变化

我就当这就已经是训练好的模糊神经网络了
所以就对这个网络输入新的数据,新的数据也经过归一化处理,在[0 1]之间,用output=evalfis(p,a)指令,其中a就是读取的训练好的网络,用showfis显示这个网络的话,可以看到输入、输出都是在大于0,小于1的范围内,也可以通过指令将范围规定在[0 1];

我认为输出应该在规定的[0 1]范围内,可是输出是在[-1 0.8]这个范围的,我就不知道是怎么回事了?
是这个算法的输出本来就是关于0的对称输出呢,还是我的程序有什么问题?
我就是想要[0 1]之间的输出,应该怎么改呢??

请高手指教,谢谢了!!!
 楼主| 发表于 2006-9-30 09:38 | 显示全部楼层

求助:模糊神经网络

或者还有什么其他方法做模糊神经网络的
请高手指教!
先谢谢了~
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-14 22:34 , Processed in 0.055966 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表