資源簡介
內有詳細注釋,程序通用性很好,只需簡單適當修改,適合初學者。
代碼片段和文件信息
%?BP?神經網絡用于預測
%?使用平臺?-?Matlab7.0
%?數據為1986年到2000年的交通量?,網絡為3輸入,1輸出
%?15組數據,其中9組為正常訓練數據,3組為變量數據,3組為測試數據
%by?akjuan
%all?rights?preserved?by?www.4math.cn
%2008.11
clc
clear
%---------------------------------------------------
%原始數據
%---------------------------------------------------
year=1986:2000;%數據是從1986到2000年的
p=[493?372?445;372?445?176;445?176?235;176?235?378;235?378?429;...
378?429?561;429?561?651;561?651?467;651?467?527;467?527?668;...
527?668?841;?668?841?526;841?526?480;526?480?567;480?567?685]‘;%輸入數據,共15組,每組3個輸入
t=[176?235?378?429?561?651?467?527?668?841?526?480?567?685?507];%輸出數據,共15組,每組1個輸出
%---------------------------------------------------
%數據歸一化處理
%mapminmax函數默認將數據歸一化到[-11],調用形式如下
%[yps]?=%mapminmax(xyminymax)
%x需歸化的數據輸入
%ymin,ymax為需歸化到的范圍,不填默認為歸化到[-11]
%y歸一化后的樣本數據
%ps處理設置,ps主要在結果反歸一化中需要調用,或者使用同樣的settings歸一化另外一組數據
%---------------------------------------------------
[normInputps]?=?mapminmax(p);
[normTargetts]?=?mapminmax(t);
%---------------------------------------------------
%數據亂序,及分類處理
%將輸入的15組數據的20%,即3組,用來作為測試數據;
%?樣本的20%,即3組,用來作為變化數據;
%另外9組用來正常輸入,用來訓練;
%dividevec()用來重新隨機抽取上述三種分類的數據,原來的順序被打亂
%函數調用的語法
%[trainVvalVtestV]?=?dividevec(ptvalPercenttestPercent)
%輸入p為輸入數據,t為輸出數據
%valPercent為訓練用的變化數據在總輸入中的百分比
%testPercent為訓練用的測試數據在總輸入中的百分比
%輸出trainVvalVtestV分別為按亂序及相應百分比,抽取得到的數據
%另外,打亂后的數據,p和t都是對應的,請放心使用
%---------------------------------------------------
testPercent?=?0.20;?%?Adjust?as?desired
validatePercent?=?0.20;?%?Adust?as?desired
[trainSamplesvalidateSamplestestSamples]?=?dividevec(normInputnormTargetvalidatePercenttestPercent);
%---------------------------------------------------
%?設置網絡參數
%---------------------------------------------------?
NodeNum1?=?20;?%?隱層第一層節點數
NodeNum2=40;?%?隱層第二層節點數
TypeNum?=?1;?%?輸出維數
TF1?=?‘tansig‘;TF2?=?‘tansig‘;?TF3?=?‘tansig‘;%各層傳輸函數,TF3為輸出層傳輸函數
%如果訓練結果不理想,可以嘗試更改傳輸函數,以下這些是各類傳輸函數
%TF1?=?‘tansig‘;TF2?=?‘logsig‘;
%TF1?=?‘logsig‘;TF2?=?‘purelin‘;
%TF1?=?‘tansig‘;TF2?=?‘tansig‘;
%TF1?=?‘logsig‘;TF2?=?‘logsig‘;
%TF1?=?‘purelin‘;TF2?=?‘purelin‘;?
%注意創建BP網絡函數newff()的參數調用,在新版本(7.6)中已改變
net=newff(minmax(normInput)[NodeNum1NodeNum2TypeNum]{TF1?TF2?TF3}‘traingdx‘);%創建四層BP網絡
%---------------------------------------------------
%?設置訓練參數
%---------------------------------------------------?
net.trainParam.epochs=10000;%訓練次數設置
net.trainParam.goal=1e-6;%訓練目標設置
net.trainParam.lr=0.01;%學習率設置應設置為較少值,太大雖然會在開始加快收斂速度,但臨近最佳點時,會產生動蕩,而致使無法收斂
%---------------------------------------------------
%?指定訓練函數
%---------------------------------------------------
%?net.trainFcn?=?‘traingd‘;?%?梯度下降算法
%?net.trainFcn?=?‘traingdm‘;?%?動量梯度下降算法
%
%?net.trainFcn?=?‘traingda‘;?%?變學習率梯度下降算法
%?net.trainFcn?=?‘traingdx‘;?%?變學習率動量梯度下降算法
%
%?(大型網絡的首選算法)
%?net.trainFcn?=?‘trainrp‘;?%?RPROP(彈性BP)算法內存需求最小
%
%?(共軛梯度算法)
%?net.trainFcn?=?‘traincgf‘;?%?Fletcher-Reeves修正算法
%?net.trainFcn?=?‘traincgp‘;?%?Polak-Ribiere修正算法
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????6070??2012-07-23?16:23??BPyuce.m
- 上一篇:道路識別
- 下一篇:LTE load params
評論
共有 條評論