您好,是這樣的:
經過訓練後的參數比較差,用原數據輸入訓練好的網路,得出結果和要的結果誤差很大,不明白是怎麼回事?
還有要是多輸入多輸出這段程序該怎麼改?模糊神經網路可以用matlab工具箱實現嗎?
還有輸入數據差別比較大(就是大小差異大)是不是要進行歸一化再學習訓練呢?
求解,求解答!
對於你的幫助不勝感激!
clear all
clc
close all
tic,
%[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及輸出層初始權值W
for i=1:p1;
for j=1:k;
m(i,j)=1+0.6*rand(1);
b(i,j)=1+0.6*rand(1);
end
end
for 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)]);
end
end
% 模糊推理計算:a21,a22.幾個隸屬度函數,得出幾個值,此處已知輸入為2
%%%%----由以前的取小做法改為相乘—prod(x,1) or prod(x,2)———
v=[];
for i=1:k
for j=1:k
v=[v,u(1,i)*u(2,j)];
end
end
% 歸一化計算模糊推理的值;相當於已經除去了經典去模糊輸出的分母值
for i=1:length(v);
v1(i)=v(i)/sum(v);
end
% 系統輸出
% out1(q)=w*v';
% e(q)=(y(q)-out1(q));
% end
% out=out1
out1(q)=w*v1';
e(q)=y(q)-out1(q);
end
out=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 p<=s & EE>0.05
%%%%%%%%%%%%%_____隸屬度參數 M. B 輸出層權值參數 W 的修正過程_____%%%%%%%%%%%%
%%1.--W
wc=zeros(1,k*k);
for i=1:k*k;
wc(i)=-lr*e(r)*v1(i);
end
%%2.--M
mc=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);
end
end
%%3.--B
bc=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);
end
end
% 4.參數修正 m b w
m=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)]);
end
end
v=[];
for i=1:7
for j=1:7
v=[v,u(1,i)*u(2,j)];
end
end
% 歸一化計算模糊推理的值;相當於已經除去了經典去模糊輸出的分母值
for i=1:length(v)
v1(i)=v(i)/sum(v);
end
out1(q)=w*v1';
end
out=out1;
p=p+1;
EE=(1/2)*sumsqr(y-out);
E(p)=EE;
r=r+1;
if r>p2
r=1;
end
e(r)=(y(r)-out(r));
end
%%%%%%%%%%%%%%%%%%%________________當誤差或迭代步數滿足要求後得到結果_________________%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
m,b,w,E_out=EE,e
epoch=1:size(E,2);
figure
plot(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神經網路編程的內容簡介
《MATLAB神經網路編程》結合神經網路的概念、理論和應用,以MATLAB為平台,系統地介紹了神經網路工具箱中的前向型神經網路、局部型神經網路、反饋型神經網路、競爭型神經網路、神經網路控制的綜合應用、神經網路在Simulink中的應用、神經網路的模糊控制及其自定義網路等內容。《MATLAB神經網路編程》重點是運用MATLAB神經網路工具箱介紹神經網路分析研究中的各種概念、理論、方法、演算法及其實現。《MATLAB神經網路編程》內容安排合理,理論結合實際,同時作者列舉了其總結的大量應用實例。《MATLAB神經網路編程》講述的各種統計理論和方法淺顯易懂,並均能在實際生活中找到應用對象。《MATLAB神經網路編程》可以作為廣大在校本科生和研究生的學慣用書,也可以作為廣大科研人員、學者、工程技術人員的參考用書。
㈢ MATLAB模糊神經網路的模糊規則怎麼確定和輸入
1、表5.1是根據經驗規則
2、一條條的敲、可以不用自帶的工具箱直接編m文件編寫響應的程序。
㈣ matlab 有沒有模糊神經網路工具箱
有,工具箱名稱:anfisedit,以下是一些使用說明。
1. GUI工具
Anfisedit 打開ANFIS編輯器回GUI、Fuzzy 調用基本答FIS編輯器、Mfedit 隸屬度函數編輯器、Ruleedit 規則編輯器和語法解析器、Ruleview 規則觀察器和模糊推理方框圖、Surfview輸出曲面觀察器
2. 隸屬度函數
dsigmf 兩個sigmoid型隸屬度函數之差組成的隸屬度函數、gauss2mf 建立兩邊型高斯隸屬度函數、gaussmf 建立高斯曲線隸屬度函數、gbellmf 建立一般鍾型隸屬度函數、pimf 建立Π型隸屬度函數、psigmf 通過兩個sigmoid型隸屬度函數的乘積構造隸屬度函數、smf 建立S-型隸屬度函數、sigmf
建立Sigmoid型隸屬度函數、trapmf 建立梯形隸屬度函數、trimf 建立三角形隸屬度函數、zmf 建立Z-型隸屬度函數
㈤ matlab 在神經網路 模糊控制
我的畢設只用把PID和模糊PID相比較
常規PID,用Matlab里的Simulink模塊模擬,建立你要做的動力學模型的傳函或者狀態空間。PID參數調節可用臨界比度法。
模糊PID就麻煩了,打開Matlab中FIS模塊,一般都用二階模糊?輸入E,EC的隸屬函數,一般為高斯,和輸出模糊Kp,Ki,Kd,一般為三角。還要整定模糊規則,再載入到Simulink里。調節模糊因子Gu,Ge,Gec,設置模糊PID的參數。
總之,你這個問題在白度知道里很難說清楚。
㈥ matlab中神經網路的數據歸一化處理就是相當於模糊化嗎
1、線性函數轉換,表達式如下:
y=(x-MinValue)/(MaxValue-MinValue)
說明:x、y分別為轉換前、後的值,MaxValue、MinValue分別為樣本的最大值和最小值。
2、對數函數轉換,表達式如下:
y=log10(x)
說明:以10為底的對數函數轉換。
3、反餘切函數轉換,表達式如下:
y=atan(x)*2/PI
歸一化是為了加快訓練網路的收斂性,可以不進行歸一化處理
歸一化的具體作用是歸納統一樣本的統計分布性。歸一化在0-1之間是統計的概率分布,歸一化在-1--+1之間是統計的坐標分布。歸一化有同一、統一和合一的意思。無論是為了建模還是為了計算,首先基本度量單位要同一,神經網路是以樣本在事件中的統計分別幾率來進行訓練(概率計算)和預測的,歸一化是同一在0-1之間的統計概率分布;
當所有樣本的輸入信號都為正值時,與第一隱含層神經元相連的權值只能同時增加或減小,從而導致學習速度很慢。為了避免出現這種情況,加快網路學習速度,可以對輸入信號進行歸一化,使得所有樣本的輸入信號其均值接近於0或與其均方差相比很小。
歸一化是因為sigmoid函數的取值是0到1之間的,網路最後一個節點的輸出也是如此,所以經常要對樣本的輸出歸一化處理。所以這樣做分類的問題時用[0.9 0.1 0.1]就要比用[1 0 0]要好。
但是歸一化處理並不總是合適的,根據輸出值的分布情況,標准化等其它統計變換方法有時可能更好。
關於用premnmx語句進行歸一化:
premnmx語句的語法格式是:[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T)
其中P,T分別為原始輸入和輸出數據,minp和maxp分別為P中的最小值和最大值。mint和maxt分別為T的最小值和最大值。
premnmx函數用於將網路的輸入數據或輸出數據進行歸一化,歸一化後的數據將分布在[-1,1]區間內。
我們在訓練網路時如果所用的是經過歸一化的樣本數據,那麼以後使用網路時所用的新數據也應該和樣本數據接受相同的預處理,這就要用到tramnmx。
下面介紹tramnmx函數:
[Pn]=tramnmx(P,minp,maxp)
其中P和Pn分別為變換前、後的輸入數據,maxp和minp分別為premnmx函數找到的最大值和最小值。
(by terry2008)
matlab中的歸一化處理有三種方法
1. premnmx、postmnmx、tramnmx
2. restd、poststd、trastd
3. 自己編程
具體用那種方法就和你的具體問題有關了
(by happy)
pm=max(abs(p(i,:))); p(i,:)=p(i,:)/pm;
和
for i=1:27
p(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
end 可以歸一到0 1 之間
0.1+(x-min)/(max-min)*(0.9-0.1)其中max和min分別表示樣本最大值和最小值。
這個可以歸一到0.1-0.9