您好,是这样的:经过训练后的参数比较差,用原数据输入训练好的网络,得出结果和要的结果误差很大,不明白是怎么回事?还有要是多输入多输出这段程序该怎么改?模糊神经网络可以用matlab工具箱实现吗?
还有输入数据差别比较大(就是大小差异大)是不是要进行归一化再学习训练呢?求解,求解答!对于你的帮助不胜感激!
clear allclcclose alltic,%[x,y]=data;x=[1 2 3 4 5 6 7 8;-1 -2 -3 -4 -5 -6 -7 -8];y=[2 3 4 5 6 7 8 9]; %%%%%--数据显示,输入为-两输入,输出为-单输出。
--------样本为p2组[p1,p2]=size(x); % 隶属度函数个数k=7;% 初始化四个隶属度函数的参数A,B及输出层初始权值Wfor i=1:p1; for j=1:k;m(i,j)=1+0.6*rand(1);b(i,j)=1+0.6*rand(1);endendfor j=1:k*k;w(j)=1+rand(1);end%%%---推理计算输出值for q=1:p2;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-----用同一隶属度参数对 输入样本 X 累计计算% 选用高斯函数作为隶属度,求隶属度,共 size(x,2)+k 个。
x(1) K个,x(2) K个for i=1:p1;for j=1:k;u(i,j)=gaussmf(x(i,q),[m(i,j),b(i,j)]);endend% 模糊推理计算:a21,a22.几个隶属度函数,得出几个值,此处已知输入为2%%%%----由以前的取小做法改为相乘—prod(x,1) or prod(x,2)———v=[];for i=1:kfor j=1:k v=[v,u(1,i)*u(2,j)];endend% 归一化计算模糊推理的值;相当于已经除去了经典去模糊输出的分母值for i=1:length(v);v1(i)=v(i)/sum(v);end% 系统输出% out1(q)=w*v';% e(q)=(y(q)-out1(q));% end% out=out1out1(q)=w*v1';e(q)=y(q)-out1(q);endout=out1;%- 三。
参数修正过程。
增加方式,非批处理方式迭代%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-----------------------------误差反向传播过程--------------------------------------------% 取误差函数:E=(1/2)*sumsqr(t-y)E=(1/2)*sumsqr(y-out);EE=E;% e=sum(y-out)lr=0.3; % c2=zeros(2,2);%%%%----------------------------------------误差反传后的参数修正过程-------------------r=1; %p=1;s=1000; %% e(r)=y(r)-out(r);while p0.05%%%%%%%%%%%%%_____隶属度参数 M. B 输出层权值参数 W 的修正过程_____%%%%%%%%%%%%%%1.--Wwc=zeros(1,k*k);for i=1:k*k;wc(i)=-lr*e(r)*v1(i);end%%2.--Mmc=zeros(p1,k);for i=1:p1;for j=1:k;mc(i,j)=2*lr*e(r) * w(j) * (v(j)/u(i,j)) * exp(-((x(i,r)-m(i,j)).^2)/(b(i,j).^2))* (x(i,r)-m(i,j))/(b(i,j).^2);endend%%3.--Bbc=zeros(p1,k);for i=1:p1;for j=1:k;bc(i,j)=2*lr*e(r)* w(j) * (v(j)/u(i,j)) * exp(-((x(i,r)-m(i,j)).^2)/(b(i,j).^2)) * ((x(i,r)-m(i,j)).^2)/(b(i,j).^3);endend% 4.参数修正 m b wm=m-mc;b=b-bc;w=w-wc;%%%%%%%%%%%_______利用修正后的参数重新计算_____________%%%%%%%%%%%%%%%%%%%%%% 5.利用修正过的参数重新计算输出for q=1:p2; for i=1:p1;for j=1:k;u(i,j)=gaussmf(x(i,q),[m(i,j),b(i,j)]);endendv=[];for i=1:7for j=1:7 v=[v,u(1,i)*u(2,j)];endend% 归一化计算模糊推理的值;相当于已经除去了经典去模糊输出的分母值for i=1:length(v)v1(i)=v(i)/sum(v);endout1(q)=w*v1';endout=out1;p=p+1;EE=(1/2)*sumsqr(y-out);E(p)=EE;r=r+1;if r>p2r=1;ende(r)=(y(r)-out(r));end%%%%%%%%%%%%%%%%%%%________________当误差或迭代步数满足要求后得到结果_________________%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%m,b,w,E_out=EE,eepoch=1:size(E,2);figureplot(epoch,E,'-r');% plot(epoch,out(1),'b');% axis([0 1.5*s min(E) max(E)]);% set(gca,'fontsize',8);% set(gca,'xtick',0:s/10:1.5*s);%set(gca,'ytick',1e-30:1e5:1e5);%set(gcf,'color','b')title('误差变化曲线');xlabel('步数');ylabel('误差');toc%% %% 泛化过程。
谷歌人工智能写作项目:神经网络伪原创
用matlabR2014a软件,可以进行BP模糊神经网络预测写作猫。
现以人口预测为例说明其实现过程:% 清空环境变量clc,clf,close all% x为原始序列t=1990:2009; %年份x=[11 28 30 42 44 56 49 60 50 63 56 74 76 65 92 105 124 117 132 128]; %某地区人口数,要预测2010-2016年的某地区人口数。
t=1:length(x);lag=2; fn=length(t);[f_out,iinput]=BP(x,lag,fn); %调用神经网络函数[x' iinput']R2=corrcoef(x,iinput)%预测年份或某一时间段t1=length(x)+1:length(x)+7;%预测步数为fnfn=length(t1); [f_out,iinput]=BP(x,lag,fn);P=vpa(f_out,5);t=1990:2009;t1=2010:2016;[t1' P']% 画出预测图figure(6),plot(t,x,'b*-'),hold onplot(t(end):t1(end),[iinput(end),f_out],'rp-'),grid ontitle('BP神经网络预测某地区人口数','fontsize',12)xlabel('年份'),ylabel('人口数');legend('1990-2009年人口变化数','2010-2016年人口预测数');。
您好,是这样的:经过训练后的参数比较差,用原数据输入训练好的网络,得出结果和要的结果误差很大,不明白是怎么回事?还有要是多输入多输出这段程序该怎么改?模糊神经网络可以用matlab工具箱实现吗?
还有输入数据差别比较大(就是大小差异大)是不是要进行归一化再学习训练呢?求解,求解答!对于你的帮助不胜感激!
clear allclcclose alltic,%[x,y]=data;x=[1 2 3 4 5 6 7 8;-1 -2 -3 -4 -5 -6 -7 -8];y=[2 3 4 5 6 7 8 9]; %%%%%--数据显示,输入为-两输入,输出为-单输出。
--------样本为p2组[p1,p2]=size(x); % 隶属度函数个数k=7;% 初始化四个隶属度函数的参数A,B及输出层初始权值Wfor i=1:p1; for j=1:k;m(i,j)=1+0.6*rand(1);b(i,j)=1+0.6*rand(1);endendfor j=1:k*k;w(j)=1+rand(1);end%%%---推理计算输出值for q=1:p2;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-----用同一隶属度参数对 输入样本 X 累计计算% 选用高斯函数作为隶属度,求隶属度,共 size(x,2)+k 个。
x(1) K个,x(2) K个for i=1:p1;for j=1:k;u(i,j)=gaussmf(x(i,q),[m(i,j),b(i,j)]);endend% 模糊推理计算:a21,a22.几个隶属度函数,得出几个值,此处已知输入为2%%%%----由以前的取小做法改为相乘—prod(x,1) or prod(x,2)———v=[];for i=1:kfor j=1:k v=[v,u(1,i)*u(2,j)];endend% 归一化计算模糊推理的值;相当于已经除去了经典去模糊输出的分母值for i=1:length(v);v1(i)=v(i)/sum(v);end% 系统输出% out1(q)=w*v';% e(q)=(y(q)-out1(q));% end% out=out1out1(q)=w*v1';e(q)=y(q)-out1(q);endout=out1;%- 三。
参数修正过程。
增加方式,非批处理方式迭代%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-----------------------------误差反向传播过程--------------------------------------------% 取误差函数:E=(1/2)*sumsqr(t-y)E=(1/2)*sumsqr(y-out);EE=E;% e=sum(y-out)lr=0.3; % c2=zeros(2,2);%%%%----------------------------------------误差反传后的参数修正过程-------------------r=1; %p=1;s=1000; %% e(r)=y(r)-out(r);while p0.05%%%%%%%%%%%%%_____隶属度参数 M. B 输出层权值参数 W 的修正过程_____%%%%%%%%%%%%%%1.--Wwc=zeros(1,k*k);for i=1:k*k;wc(i)=-lr*e(r)*v1(i);end%%2.--Mmc=zeros(p1,k);for i=1:p1;for j=1:k;mc(i,j)=2*lr*e(r) * w(j) * (v(j)/u(i,j)) * exp(-((x(i,r)-m(i,j)).^2)/(b(i,j).^2))* (x(i,r)-m(i,j))/(b(i,j).^2);endend%%3.--Bbc=zeros(p1,k);for i=1:p1;for j=1:k;bc(i,j)=2*lr*e(r)* w(j) * (v(j)/u(i,j)) * exp(-((x(i,r)-m(i,j)).^2)/(b(i,j).^2)) * ((x(i,r)-m(i,j)).^2)/(b(i,j).^3);endend% 4.参数修正 m b wm=m-mc;b=b-bc;w=w-wc;%%%%%%%%%%%_______利用修正后的参数重新计算_____________%%%%%%%%%%%%%%%%%%%%%% 5.利用修正过的参数重新计算输出for q=1:p2; for i=1:p1;for j=1:k;u(i,j)=gaussmf(x(i,q),[m(i,j),b(i,j)]);endendv=[];for i=1:7for j=1:7 v=[v,u(1,i)*u(2,j)];endend% 归一化计算模糊推理的值;相当于已经除去了经典去模糊输出的分母值for i=1:length(v)v1(i)=v(i)/sum(v);endout1(q)=w*v1';endout=out1;p=p+1;EE=(1/2)*sumsqr(y-out);E(p)=EE;r=r+1;if r>p2r=1;ende(r)=(y(r)-out(r));end%%%%%%%%%%%%%%%%%%%________________当误差或迭代步数满足要求后得到结果_________________%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%m,b,w,E_out=EE,eepoch=1:size(E,2);figureplot(epoch,E,'-r');% plot(epoch,out(1),'b');% axis([0 1.5*s min(E) max(E)]);% set(gca,'fontsize',8);% set(gca,'xtick',0:s/10:1.5*s);%set(gca,'ytick',1e-30:1e5:1e5);%set(gcf,'color','b')title('误差变化曲线');xlabel('步数');ylabel('误差');toc%% %% 泛化过程。
分为两类:功能型工具箱和领域型工具箱。 功能型工具箱主要用来扩充MATLAB的符号计算功能、图形建模仿真功能、文字处理功能以及与硬件实时交互功能,能用于多种学科。领域型工具箱是专业性很强的。
如图像处理工具箱(Image Processing Toolbox)、控制工具箱(Control Toolbox)、信号处理工具箱(Signal Processing Toolbox)等。
下面,将MATLAB工具箱内所包含的主要内容做简要介绍: 1) 图像处理工具箱(Image Processing Toolbox)。
* 二维滤波器设计和滤波 * 图像恢复增强 * 色彩、集合及形态操作 * 二维变换 * 图像分析和统计 可由结构图直接生成可应用的C语言源代码。
2)控制系统工具箱(Control System Toolbox)。
鲁连续系统设计和离散系统设计 * 状态空间和传递函数 * 模型转换 * 频域响应:Bode图、Nyquist图、Nichols图 * 时域响应:冲击响应、阶跃响应、斜波响应等 * 根轨迹、极点配置、LQG 3)财政金融工具箱(FinancialTooLbox)。
* 成本、利润分析,市场灵敏度分析 * 业务量分析及优化 * 偏差分析 * 资金流量估算 * 财务报表 4)频率域系统辨识工具箱(Frequency Domain System ldentification Toolbox * 辨识具有未知延迟的连续和离散系统 * 计算幅值/相位、零点/极点的置信区间 * 设计周期激励信号、最小峰值、最优能量诺等 5)模糊逻辑工具箱(Fuzzy Logic Toolbox)。
* 友好的交互设计界面 * 自适应神经—模糊学习、聚类以及Sugeno推理 * 支持SIMULINK动态仿真 * 可生成C语言源代码用于实时应用 (6)高阶谱分析工具箱(Higher—Order SpectralAnalysis Toolbox * 高阶谱估计 * 信号中非线性特征的检测和刻画 * 延时估计 * 幅值和相位重构 * 阵列信号处理 * 谐波重构 (7) 通讯工具箱(Communication Toolbox)。
令提供100多个函数和150多个SIMULINK模块用于通讯系统的仿真和分析 ——信号编码 ——调制解调 ——滤波器和均衡器设计 ——通道模型 ——同步 (8)线性矩阵不等式控制工具箱(LMI Control Toolbox)。
* LMI的基本用途 * 基于GUI的LMI编辑器 * LMI问题的有效解法 * LMI问题解决方案 (9)模型预测控制工具箱(ModelPredictive Control Toolbox * 建模、辨识及验证 * 支持MISO模型和MIMO模型 * 阶跃响应和状态空间模型 (10)u分析与综合工具箱(u-Analysis and Synthesis Toolbox) * u分析与综合 * H2和H无穷大最优综合 * 模型降阶 * 连续和离散系统 * u分析与综合理论 (11)神经网络工具箱(Neursl Network Toolbox)。
* BP,Hopfield,Kohonen、自组织、径向基函数等网络 * 竞争、线性、Sigmoidal等传递函数 * 前馈、递归等网络结构 * 性能分析及应用 (12)优化工具箱(Optimization Toolbox)。
* 线性规划和二次规划 * 求函数的最大值和最小位 * 多目标优化 * 约束条件下的优化 * 非线性方程求解 (13)偏微分方程工具箱(Partial DifferentialEquation Toolbox)。
* 二维偏微分方程的图形处理 * 几何表示 * 自适应曲面绘制, * 有限元方法 (14)鲁棒控制工具箱(Robust Control Toolbox)。
* LQG/LTR最优综合 * H2和H无穷大最优综合 * 奇异值模型降阶 * 谱分解和建模 (15)信号处理工具箱(signal Processing Toolbox) * 数字和模拟滤波器设计、应用及仿真 * 谱分析和估计 * FFT,DCT等变换 * 参数化模型 (16)样条工具箱(SPline Toolbox)。
* 分段多项式和B样条 * 样条的构造 * 曲线拟合及平滑 * 函数微分、积分(17)统计工具箱(Statistics Toolbox)。
* 概率分布和随机数生成 * 多变量分析 * 回归分析 * 主元分析 * 假设检验 (18)符号数学工具箱(Symbolic Math Toolbox)。
* 符号表达式和符号矩阵的创建 * 符号微积分、线性代数、方程求解 * 因式分解、展开和简化 * 符号函数的二维图形 * 图形化函数计算器 (19)系统辨识工具箱(SystEm Identification Toolbox) * 状态空间和传递函数模型 * 模型验证 * MA,AR,ARMA等 * 基于模型的信号处理 * 谱分析 (20)小波工具箱(Wavelet Toolbox)。
* 基于小波的分析和综合 * 图形界面和命令行接口 * 连续和离散小波变换及小波包 * 一维、二维小波 * 自适应去噪和压缩。
我上次发给你的程序,只要你从网上下一个matcom45就行了,直接装在c盘就可以了,你发给我的论文变量太多用一般的遗传算法不行,我从网上发现了一个PID神经网络,相当好用,不用计算隐层数目,很适合用遗传算法进行优化,我编了一个例程回来发给你。
我真的不会用matlab的工具箱,如果一定要用matlab来做优化,恐怕我帮不了你了。为什么一定要用matlab,用C++自己编写不也很好吗?
function [presim ss net] = simnonlin( y,d,n )% y-- 时间序列数据,列向量% d-- 时间延迟参数,正整数% n--用于训练的点的个数,正整数trainset = gettrain(y,d);inputs = trainset(:,1:end-1)';targets = trainset(:,end)';net = feedforwardnet(20,'trainscg');% net = newff(inputs,targets,40);% net = train(net,inputs,targets);net=train(net,inputs,targets);presim(1:d)=y(end-d+1:end);for i = d+1:d + npresim(i) = sim(net,presim(i-d:i-1)');endss = presim(d+1:end)';end调用示例:t=[1:100]';y = exp(-0.1*t).*sin(t);d=10;n=80;sim = simnonlin( y,d,n );。
clc;clearall;closeall;%%----BuildatrainingsetofasimilarversionofXORc_1=[00];c_2=[11];c_3=[01];c_4=[10];n_L1=20;%numberoflabel1n_L2=20;%numberoflabel2A=zeros(n_L1*2,3);A(:,3)=1;B=zeros(n_L2*2,3);B(:,3)=0;%createrandompointsfori=1:n_L1A(i,1:2)=c_1+rand(1,2)/2;A(i+n_L1,1:2)=c_2+rand(1,2)/2;endfori=1:n_L2B(i,1:2)=c_3+rand(1,2)/2;B(i+n_L2,1:2)=c_4+rand(1,2)/2;end%showpointsscatter(A(:,1),A(:,2),[],'r');holdonscatter(B(:,1),B(:,2),[],'g');X=[A;B];data=X(:,1:2);label=X(:,3);%%Usingkmeanstofindcintervectorn_center_vec=10;rng(1);[idx,C]=kmeans(data,n_center_vec);holdonscatter(C(:,1),C(:,2),'b','LineWidth',2);%%Calulatesigman_data=size(X,1);%calculateKK=zeros(n_center_vec,1);fori=1:n_center_vecK(i)=numel(find(idx==i));end%UsingknnsearchtofindKnearestneighborpointsforeachcentervector%thencalucatesigmasigma=zeros(n_center_vec,1);fori=1:n_center_vec[n,d]=knnsearch(data,C(i,:),'k',K(i));L2=(bsxfun(@minus,data(n,:),C(i,:)).^2);L2=sum(L2(:));sigma(i)=sqrt(1/K(i)*L2);end%%Calutateweights%kernelmatrixk_mat=zeros(n_data,n_center_vec);fori=1:n_center_vecr=bsxfun(@minus,data,C(i,:)).^2;r=sum(r,2);k_mat(:,i)=exp((-r.^2)/(2*sigma(i)^2));endW=pinv(k_mat'*k_mat)*k_mat'*label;y=k_mat*W;%y(y>=0.5)=1;%y(y。
首先要明白模糊控制的含义及模糊控制器的设计过程,一般包括模糊化,建立规则,模糊推理,清晰化等过程,然后神经网络(重点是BP神经网络的计算过程和BP算法),然后用matlab编程实现一遍,基本就能弄清楚了。
matlab很好学的,又称傻瓜语言。建议你看模糊控制、神经网络各一本教材,然后尝试用matlab实现一遍,基本就能学会了。