模糊神经网络matlab模拟仿真
1、基礎(chǔ)知識(shí)理論
? ? ? ?BP網(wǎng)絡(luò)的傳遞函數(shù)有多種。Log-sigmoid型函數(shù)的輸入值可取任意值,輸出值在0和1之間;tan-sigmod型傳遞函數(shù)tansig的輸入值可取任意值,輸出值在-1到+1之間;線性傳遞函數(shù)purelin的輸入與輸出值可取任意值。BP網(wǎng)絡(luò)通常有一個(gè)或多個(gè)隱層,該層中的神經(jīng)元均采用sigmoid型傳遞函數(shù),輸出層的神經(jīng)元?jiǎng)t采用線性傳遞函數(shù),整個(gè)網(wǎng)絡(luò)的輸出可以取任意值。
newff()? 功能? 建立一個(gè)前向BP網(wǎng)絡(luò),格式? net = newff(PR,[S1 S2...SN1],{TF1 TF2...TFN1},BTF,BLF,PF)
?net為創(chuàng)建的新BP神經(jīng)網(wǎng)絡(luò);? PR為網(wǎng)絡(luò)輸入取向量取值范圍的矩陣;? [S1 S2…SNl]表示網(wǎng)絡(luò)隱含層和輸出層神經(jīng)元的個(gè)數(shù);
? {TFl TF2…TFN1}表示網(wǎng)絡(luò)隱含層和輸出層的傳輸函數(shù),默認(rèn)為‘tansig’;? BTF表示網(wǎng)絡(luò)的訓(xùn)練函數(shù),默認(rèn)為‘trainlm’;? BLF表示網(wǎng)絡(luò)的權(quán)值學(xué)習(xí)函數(shù),默認(rèn)為‘learngdm’;? PF表示性能數(shù),默認(rèn)為‘mse’。
BP網(wǎng)絡(luò)一般都是用三層的,傳遞函數(shù)如下:
compet---競爭型傳遞函數(shù);
hardlim---閾值型傳遞函數(shù);
hardlims---對稱閾值型傳輸函數(shù);
logsig---S型傳輸函數(shù);
poslin---正線性傳輸函數(shù);
purelin---線性傳輸函數(shù);
radbas---徑向基傳輸函數(shù);
satlin---飽和線性傳輸函數(shù);
satlins---飽和對稱線性傳輸函數(shù);
softmax---柔性最大值傳輸函數(shù);
tansig---雙曲正切S型傳輸函數(shù);
tribas---三角形徑向基傳輸函數(shù);
神經(jīng)元上的傳遞函數(shù):
? ?傳遞函數(shù)是BP網(wǎng)絡(luò)的重要組成部分,必須是連續(xù)可微的,BP網(wǎng)絡(luò)常采用S型的對數(shù)或正切函數(shù)和線性函數(shù)。
神經(jīng)網(wǎng)絡(luò)輸入訓(xùn)練的矩陣必須是,行相同,或者是列相同,使用matlab建立的一般是列相同,就可以訓(xùn)練
?
2、具體例子
%bp神經(jīng)網(wǎng)絡(luò)
p=[1 2;-1 1;-2 1;-4 0]';
t=[0.2 0.8 0.8 0.2];
net=newff([-1 1;-1 1],[5 1],{'logsig','logsig'},'traingd');
net.trainParam.goal=0.001;
net.trainParam.epochs=5000;
[net,tr]=train(net,p,t);
disp('網(wǎng)絡(luò)訓(xùn)練后的第一層權(quán)值為:')
iw1=net.iw{1}
disp('網(wǎng)絡(luò)訓(xùn)練后的第一層fa值為:')
b1=net.b{1}
disp('網(wǎng)絡(luò)訓(xùn)練后的第一層權(quán)值為:')
iw2=net.Lw{2}
disp('網(wǎng)絡(luò)訓(xùn)練后的第2層fa值為:')
b2=net.b{2}
?p1=[1 2;-1 1;-2 1;-4 0]';
a2=sim(net,p1);
disp('輸出分類結(jié)果為')
a2=a2>0.5
第二個(gè)例子:
load('spectra_data.mat')
temp = randperm(size(NIR,1));
% 訓(xùn)練集——50個(gè)樣本
P_train = NIR(temp(1:50),:)';
T_train = octane(temp(1:50),:)';
% 測試集——10個(gè)樣本
P_test = NIR(temp(51:end),:)';
T_test = octane(temp(51:end),:)';
N = size(P_test,2);
net = newff(P_train,T_train,3);
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
net.trainParam.lr = 0.01;
net = train(net,P_train,T_train);
T_sim = sim(net,P_test);
error = abs(T_sim - T_test)./T_test;
R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2));
result = [T_test' T_sim' error'];
figure
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('真實(shí)值','預(yù)測值')
xlabel('預(yù)測樣本')
ylabel('辛烷值')
string = {'測試集辛烷值含量預(yù)測結(jié)果對比';['R^2=' num2str(R2)]};
title(string)
R2檢驗(yàn)結(jié)果
3、仿真
首先搭建仿真模塊,然后使用subsystem模塊,matlab使用gensim()函數(shù),調(diào)用剛剛做好的訓(xùn)練模型,gensim(net,-1)一般格式,
然后引入神經(jīng)網(wǎng)絡(luò)模塊,進(jìn)行仿真
總結(jié)
以上是生活随笔為你收集整理的模糊神经网络matlab模拟仿真的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国第一代程序员列传 我的偶像
- 下一篇: 国足之:科学探索