基于BP神经网络的含水率预测模型matlab仿真
歡迎訂閱《FPGA學習入門100例教程》、《MATLAB學習入門100例教程》
目錄
一、理論基礎
二、核心程序
三、測試結果
一、理論基礎
? ? ? ?在人工神經網絡的發展歷史上,感知機(Multilayer Perceptron,MLP)網絡曾對人工神經網絡的發展發揮了極大的作用,也被認為是一種真正能夠使用的人工神經網絡模型,它的出現曾掀起了人們研究人工神經元網絡的熱潮。單層感知網絡(M-P模型)做為最初的神經網絡,具有模型清晰、結構簡單、計算量小等優點。但是,隨著研究工作的深入,人們發現它還存在不足,例如無法處理非線性問題,即使計算單元的作用函數不用閥函數而用其他較復雜的非線性函數,仍然只能解決線性可分問題.不能實現某些基本功能,從而限制了它的應用。增強網絡的分類和識別能力、解決非線性問題的唯一途徑是采用多層前饋網絡,即在輸入層和輸出層之間加上隱含層。構成多層前饋感知器網絡。
? ? ? 20世紀80年代中期,David Runelhart。Geoffrey Hinton和Ronald W-llians、DavidParker等人分別獨立發現了誤差反向傳播算法(Error Back Propagation Training),簡稱BP,系統解決了多層神經網絡隱含層連接權學習問題,并在數學上給出了完整推導。人們把采用這種算法進行誤差校正的多層前饋網絡稱為BP網。
BP神經網絡具有任意復雜的模式分類能力和優良的多維函數映射能力,解決了簡單感知器不能解決的異或(Exclusive OR,XOR)和一些其他問題。從結構上講,BP網絡具有輸入層、隱藏層和輸出層;從本質上講,BP算法就是以網絡誤差平方為目標函數、采用梯度下降法來計算目標函數的最小值。
? ? ? BP神經網絡,即Back Propagation神經網絡,其本質是一種基于誤差反饋傳播的神經網絡算法。從結構上講,BP神經網絡是由一個信息的正向傳播網絡和一個誤差的反向傳播網絡兩個模塊構成。BP神經網絡的基本結構如下圖所示:
? ? ? ?從圖2的結構可知,BP神經網絡主要由輸入層,隱含層以及輸出層構成。來自外界的信息通過輸入層傳輸進入到隱含層進行處理,并由輸出層輸出處理結果。當BP神經網絡的輸出結果和其期望結果之間的誤差較大的時候,則進入反向傳播階段,并進行進行審計網絡權值的修正,直到輸出結果和期望結果誤差滿足一定條件為止。
?
?
?BP神經網絡模型包括其輸入輸出模型、作用函數模型、誤差計算模型和自學習模型。
二、核心程序
clc; clear; close all; warning off; rand('state',0);%% %輸入數據為溫度T,風速V,厚度h以及時間t Ni = 4; No = 1; Num_Hidden = 8;%隱含層數量 %輸出為水分比FSB Num = Ni + No; %% %訓練數據設置 data = xlsread('datas\data.xlsx'); [R,C] = size(data); for i = 1:C/Numtmps = [];tmps = data(:,Num*(i-1)+1:Num*(i));tmps_check = tmps(:,1);tmps(isnan(tmps_check),:)=[];Train_input1{i} = tmps(:,1:Ni);Train_output1{i} = tmps(:,Ni+1:Ni+No); end%% %輸入BP神經網絡進行訓練 P = []; T = []; for i=1:length(Train_input1);P = [P;Train_input1{i}];T = [T;Train_output1{i}]; end%BP神經網絡參數 net = newff(P',T',Num_Hidden); net.adaptFcn='adaptwb'; net.trainParam.mu=1.0000e-05; net.trainParam.mu_dec=0.1000; net.trainParam.mu_inc=10; net.trainParam.mu_max=1e10; net.trainparam.mc=0.2; net.trainparam.lr=0.005; net.trainparam.epochs=2000; net.trainparam.goal=1e-9; % net.trainParam.max_fail=6; % net.trainParam.min_grad=1e-7; % net.performFcn='mse'; net.trainFcn ='trainlm'; net = train(net,P',T'); save model.mat net %輸出BP神經網絡的參數 Input_W = net.IW{1,1} LayerOne_Bias = net.b{1} LayerOneToTwo_W= net.LW{2,1} LayerTwo_Bias = net.b{2} %% %通過BP神經網絡訓練后測試 for i = 1:length(Train_input1);y1{i} = sim(net,Train_input1{i}'); end%% %各種指標的輸出分析 NAME{1} = ['T=55,v=0.3,h=3']; NAME{2} = ['T=55,v=0.6,h=3']; NAME{3} = ['T=55,v=0.7,h=3']; NAME{4} = ['T=55,v=1.2,h=3']; NAME{5} = ['h=3,T=55,v=0.9']; NAME{6} = ['h=6,T=55,v=0.9']; NAME{7} = ['h=9,T=55,v=0.9']; NAME{8} = ['h=12,T=55,v=0.9']; NAME{9} = ['T=45,v=0.9,h=3']; NAME{10}= ['T=55,v=0.9,h=3']; NAME{11}= ['T=65,v=0.9,h=3']; NAME{12}= ['T=60,v=0.9,h=3']; NAME{13}= ['T=50,v=0.9,h=3']; for i = 1:13;figure;subplot(211);plot(y1{i},'ro');hold onplot(Train_output1{i},'b');xlabel('times');ylabel('水分比');legend('BP神經網絡輸出水分比','實際測量水分比');title(NAME{i});grid onsubplot(212);plot(y1{i}-Train_output1{i}' ,'b-*');xlabel('times');ylabel('水分比誤差');grid onylim([-1,1]); end%風速變化顯示 figure; subplot(121); plot(y1{1},'r-o'); hold on plot(y1{2},'b-s'); hold on plot(y1{3},'k-*'); hold on plot(y1{4},'m-^'); hold on xlabel('times'); ylabel('水分比'); legend('T=55,v=0.3,h=3','T=55,v=0.6,h=3','T=55,v=0.9,h=3','T=55,v=1.2,h=3'); grid on title('BP神經網絡輸出'); ylim([0,1.2]); subplot(122); plot(Train_output1{1},'r-o'); hold on plot(Train_output1{2},'b-s'); hold on plot(Train_output1{3},'k-*'); hold on plot(Train_output1{4},'m-^'); hold on xlabel('times'); ylabel('水分比'); legend('T=55,v=0.3,h=3','T=55,v=0.6,h=3','T=55,v=0.9,h=3','T=55,v=1.2,h=3'); grid on title('測量值'); grid on ylim([0,1.2]);%厚度變化顯示 figure; subplot(121); plot(y1{5},'r-o'); hold on plot(y1{6},'b-s'); hold on plot(y1{7},'k-*'); hold on plot(y1{8},'m-^'); hold on xlabel('times'); ylabel('水分比'); legend('h=3,T=55,v=0.9','h=6,T=55,v=0.9','h=9,T=55,v=0.9','h=12,T=55,v=0.9'); grid on title('BP神經網絡輸出'); ylim([0,1.2]); subplot(122); plot(Train_output1{5},'r-o'); hold on plot(Train_output1{6},'b-s'); hold on plot(Train_output1{7},'k-*'); hold on plot(Train_output1{8},'m-^'); hold on xlabel('times'); ylabel('水分比'); legend('h=3,T=55,v=0.9','h=6,T=55,v=0.9','h=9,T=55,v=0.9','h=12,T=55,v=0.9'); grid on title('測量值'); grid on ylim([0,1.2]);%溫度變化顯示 figure; subplot(121); plot(y1{9},'r-o'); hold on plot(y1{10},'b-s'); hold on plot(y1{11},'k-*'); hold on plot(y1{12},'m-^'); hold on plot(y1{13},'c->'); hold on xlabel('times'); ylabel('水分比'); legend('T=45,v=0.9,h=3','T=55,v=0.9,h=3','T=65,v=0.9,h=3','T=60,v=0.9,h=3','T=50,v=0.9,h=3'); grid on title('BP神經網絡輸出'); ylim([0,1.2]); subplot(122); plot(Train_output1{9},'r-o'); hold on plot(Train_output1{10},'b-s'); hold on plot(Train_output1{11},'k-*'); hold on plot(Train_output1{12},'m-^'); hold on plot(Train_output1{13},'c->'); hold on xlabel('times'); ylabel('水分比'); legend('T=45,v=0.9,h=3','T=55,v=0.9,h=3','T=65,v=0.9,h=3','T=60,v=0.9,h=3','T=50,v=0.9,h=3'); grid on title('測量值'); grid on ylim([0,1.2]);三、測試結果
?
?
?A05-60
總結
以上是生活随笔為你收集整理的基于BP神经网络的含水率预测模型matlab仿真的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 脆弱性评估_脆弱
- 下一篇: hyperledger v1.0.5 区