1. 程式人生 > >《BP神經網路的MATLAB實現》

《BP神經網路的MATLAB實現》

一. BP神經網路實現(不使用MATLAB神經網路工具箱)

1. 問題

公路運量主要包括公路客運量和公路貨運量兩方面。某個地區的公路運量主要與該地區的人數、機動車數量和公路面積有關,已知該地區20年(1990-2009)的公路運量相關資料如下:

人數/萬人

20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63

機動車數量/萬輛

0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1

公路面積/單位:萬平方公里

0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 0.56 0.59 0.59 0.67 0.69 0.79

公路客運量/萬人

5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 22598 25107 33442 36836 40548 42927 43462

公路貨運量/萬噸

1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804

2. 分析

樣本資料較多,且已知影響資料的因素(三大因素:該地區的人數、機動車數量和公路面積),可考慮將其作為BP神經網路的訓練集,對該神經網路進行訓練,然後對訓練好的神經網路進行測試,最後使用測試合格的神經網路進行預測工作。

3. MATLAB實現程式碼

BP_road.m

numberOfSample = 20; %輸入樣本數量
%取測試樣本數量等於輸入(訓練集)樣本數量,因為輸入樣本(訓練集)容量較少,否則一般必須用新鮮資料進行測試
numberOfTestSample = 20; 
numberOfForcastSample = 2; 
numberOfHiddenNeure = 8
; inputDimension = 3; outputDimension = 2; %準備好訓練集 %人數(單位:萬人) numberOfPeople=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63]; %機動車數(單位:萬輛) numberOfAutomobile=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1]; %公路面積(單位:萬平方公里) roadArea=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 0.56 0.59 0.59 0.67 0.69 0.79]; %公路客運量(單位:萬人) passengerVolume = [5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 22598 25107 33442 36836 40548 42927 43462]; %公路貨運量(單位:萬噸) freightVolume = [1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804]; %由系統時鐘種子產生隨機數 rand('state', sum(100*clock)); %輸入資料矩陣 input = [numberOfPeople; numberOfAutomobile; roadArea]; %目標(輸出)資料矩陣 output = [passengerVolume; freightVolume]; %對訓練集中的輸入資料矩陣和目標資料矩陣進行歸一化處理 [sampleInput, minp, maxp, tmp, mint, maxt] = premnmx(input, output); %噪聲強度 noiseIntensity = 0.01; %利用正態分佈產生噪聲 noise = noiseIntensity * randn(outputDimension, numberOfSample); %給樣本輸出矩陣tmp新增噪聲,防止網路過度擬合 sampleOutput = tmp + noise; %取測試樣本輸入(輸出)與輸入樣本相同,因為輸入樣本(訓練集)容量較少,否則一般必須用新鮮資料進行測試 testSampleInput = sampleInput; testSampleOutput = sampleOutput; %最大訓練次數 maxEpochs = 50000; %網路的學習速率 learningRate = 0.035; %訓練網路所要達到的目標誤差 error0 = 0.65*10^(-3); %初始化輸入層與隱含層之間的權值 W1 = 0.5 * rand(numberOfHiddenNeure, inputDimension) - 0.1; %初始化輸入層與隱含層之間的閾值 B1 = 0.5 * rand(numberOfHiddenNeure, 1) - 0.1; %初始化輸出層與隱含層之間的權值 W2 = 0.5 * rand(outputDimension, numberOfHiddenNeure) - 0.1; %初始化輸出層與隱含層之間的閾值 B2 = 0.5 * rand(outputDimension, 1) - 0.1; %儲存能量函式(誤差平方和)的歷史記錄 errorHistory = []; for i = 1:maxEpochs %隱含層輸出 hiddenOutput = logsig(W1 * sampleInput + repmat(B1, 1, numberOfSample)); %輸出層輸出 networkOutput = W2 * hiddenOutput + repmat(B2, 1, numberOfSample); %實際輸出與網路輸出之差 error = sampleOutput - networkOutput; %計算能量函式(誤差平方和) E = sumsqr(error); errorHistory = [errorHistory E]; if E < error0 break; end %以下依據能量函式的負梯度下降原理對權值和閾值進行調整 delta2 = error; delta1 = W2' * delta2.*hiddenOutput.*(1 - hiddenOutput); dW2 = delta2 * hiddenOutput'; dB2 = delta2 * ones(numberOfSample, 1); dW1 = delta1 * sampleInput'; dB1 = delta1 * ones(numberOfSample, 1); W2 = W2 + learningRate * dW2; B2 = B2 + learningRate * dB2; W1 = W1 + learningRate * dW1; B1 = B1 + learningRate * dB1; end %下面對已經訓練好的網路進行(模擬)測試 %對測試樣本進行處理 testHiddenOutput = logsig(W1 * testSampleInput + repmat(B1, 1, numberOfTestSample)); testNetworkOutput = W2 * testHiddenOutput + repmat(B2, 1, numberOfTestSample); %還原網路輸出層的結果(反歸一化) a = postmnmx(testNetworkOutput, mint, maxt); %繪製測試樣本神經網路輸出和實際樣本輸出的對比圖(figure(1))-------------------------------------- t = 1990:2009; %測試樣本網路輸出客運量 a1 = a(1,:); %測試樣本網路輸出貨運量 a2 = a(2,:); figure(1); subplot(2, 1, 1); plot(t, a1, 'ro', t, passengerVolume, 'b+'); legend('網路輸出客運量', '實際客運量'); xlabel('年份'); ylabel('客運量/萬人'); title('神經網路客運量學習與測試對比圖'); grid on; subplot(2, 1, 2); plot(t, a2, 'ro', t, freightVolume, 'b+'); legend('網路輸出貨運量', '實際貨運量'); xlabel('年份'); ylabel('貨運量/萬噸'); title('神經網路貨運量學習與測試對比圖'); grid on; %使用訓練好的神經網路對新輸入資料進行預測 %新輸入資料(2010年和2011年的相關資料) newInput = [73.39 75.55; 3.9635 4.0975; 0.9880 1.0268]; %利用原始輸入資料(訓練集的輸入資料)的歸一化引數對新輸入資料進行歸一化 newInput = tramnmx(newInput, minp, maxp); newHiddenOutput = logsig(W1 * newInput + repmat(B1, 1, numberOfForcastSample)); newOutput = W2 * newHiddenOutput + repmat(B2, 1, numberOfForcastSample); newOutput = postmnmx(newOutput, mint, maxt); disp('預測2010和2011年的公路客運量分別為(單位:萬人):'); newOutput(1,:) disp('預測2010和2011年的公路貨運量分別為(單位:萬噸):'); newOutput(2,:) %在figure(1)的基礎上繪製2010和2011年的預測情況------------------------------------------------- figure(2); t1 = 1990:2011; subplot(2, 1, 1); plot(t1, [a1 newOutput(1,:)], 'ro', t, passengerVolume, 'b+'); legend('網路輸出客運量', '實際客運量'); xlabel('年份'); ylabel('客運量/萬人'); title('神經網路客運量學習與測試對比圖(添加了預測資料)'); grid on; subplot(2, 1, 2); plot(t1, [a2 newOutput(2,:)], 'ro', t, freightVolume, 'b+'); legend('網路輸出貨運量', '實際貨運量'); xlabel('年份'); ylabel('貨運量/萬噸'); title('神經網路貨運量學習與測試對比圖(添加了預測資料)'); grid on; %觀察能量函式(誤差平方和)在訓練神經網路過程中的變化情況------------------------------------------ figure(3); n = length(errorHistory); t3 = 1:n; plot(t3, errorHistory, 'r-'); %為了更加清楚地觀察出能量函式值的變化情況,這裡我只繪製前100次的訓練情況 xlim([1 100]); xlabel('訓練過程'); ylabel('能量函式值'); title('能量函式(誤差平方和)在訓練神經網路過程中的變化圖'); grid on;

4. 執行結果

預測2010和2011年的公路客運量分別為(單位:萬人):

ans =

1.0e+04 *

4.6188 4.6601

預測2010和2011年的公路貨運量分別為(單位:萬噸):

ans =

1.0e+04 *

2.1521 2.1519

5. 繪製的影象

  1. figure(1)
    1



2. figure(2)
2


3. figure(3)
3

可以看出,使用BP網路中的負梯度下降原理之後,效果顯著。

二. 使用MATLAB的神經網路工具箱簡易實現BP網路

1. 問題

同<一>

2. 分析

同<一>

3. 工具箱中的相關函式(一些參考了MATLAB自帶的英文手冊)

mapminmax函式

  • 功能:通過將原矩陣每行的最小值和最大值對映到[YMIN,YMAX]來得到規範化的矩陣。
  • 演算法:y = ( ymax - ymin ) * ( x - xmin ) / ( xmax - xmin ) + ymin

(注:當xmax與xmin相等時,則對原矩陣使用mapminmax函式仍得到原矩陣)

  • 預設演算法:

(預設情況下,mapminmax函式的YMIN和YMAX分別是-1和1)

y = 2 * ( x - xmin ) / ( xmax - xmin ) - 1

  • [Y,PS] = mapminmax(X)

    • X:原矩陣
    • Y:對矩陣X進行規範化得到的矩陣
    • PS:存放關於原矩陣規範化過程中的相關對映資料的結構體
  • [Y,PS] = mapminmax(X,FP)

    • X:原矩陣

    • FP:含有欄位FP.ymin和FP.ymax的結構體

    • Y:對矩陣X進行規範化得到的矩陣(使用在FP的ymin和ymax規定下的演算法)

    • PS:存放關於原矩陣規範化過程中的相關對映資料的結構體

  • Y = mapminmax(‘apply’,X,PS)

    • ’apply’:必寫
    • X:原矩陣
    • PS:存放關於某個矩陣規範化過程中的相關對映資料的結構體
    • Y:對矩陣X進行規範化得到的矩陣(使用PS中的規範化方式)
  • X = mapminmax(‘reverse’,Y,PS)

    • ’reverse’:必寫
    • Y:某個矩陣
    • PS:存放關於某個矩陣規範化過程中的相關對映資料的結構體
    • X:將矩陣Y反規範化得到的矩陣(使用PS中的規範化方式,這裡指將矩陣X轉換為矩陣Y的規範化方式)

newff函式(新版本)

  • a. 功能:建立一個前饋反向傳播(BP)網路。

  • b. net=newff(P,T,S)

    • P: 輸入資料矩陣。(RxQ1),其中Q1代表R元的輸入向量。其資料意義是矩陣P有Q1列,每一列都是一個樣本,而每個樣本有R個屬性(特徵)。一般矩陣P需要事先歸一化好,即P的每一行都歸一化到[0 1]或者[-1 1]。
    • T:目標資料矩陣。(SNxQ2),其中Q2代表SN元的目標向量。資料意義參考上面,矩陣T也是事先歸一化好的。
    • S:第i層的神經元個數。(新版本中可以省略輸出層的神經元個數不寫,因為輸出層的神經元個數已經取決於T)
  • ​c. net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)(提供了可選擇的引數)

    • TF:相關層的傳遞函式,預設隱含層使用tansig函式,輸出層使用purelin函式。
    • BTF:BP神經網路學習訓練函式,預設值為trainlm函式。
    • BLF:權重學習函式,預設值為learngdm。
    • PF:效能函式,預設值為mse。
    • PF,OPF,DDF均為預設值即可。
  • d. 常用的傳遞函式:

    • purelin:線性傳遞函式
    • tansig:正切 S 型傳遞函式
    • logsig: 對數 S 型傳遞函式

(注意:隱含層和輸出層函式的選擇對BP神經網路預測精度有較大影響,一般隱含層節點傳遞函式選用tansig函式或logsig函式,輸出層節點轉移函式選用tansig函式或purelin函式。)

關於net.trainParam的常用屬性

(假定已經定義了一個BP網路net)
* net.trainParam.show: 兩次顯示之間的訓練次數
* net.trainParam.epochs: 最大訓練次數
* net.trainParam.lr: 網路的學習速率
* net.trainParam.goal: 訓練網路所要達到的目標誤差
* net.trainParam.time: 最長訓練時間(秒)

train函式

  • 功能:訓練一個神經網路

  • [NET2,TR] = train(NET1,X,T)(也可[NET2] = train(NET1,X,T) )

    • NET1:待訓練的網路
    • X: 輸入資料矩陣(已歸一化)
    • T:目標資料矩陣(已歸一化)
    • NET2:訓練得到的網路TR:存放有關訓練過程的資料的結構體

sim函式

  • 功能:模擬Simulink模型

  • SimOut = sim(‘MODEL’, PARAMETERS)

    • (見名知意,不必再解釋)

4. MATLAB實現程式碼

BP_toolbox_road.m

%準備好訓練集

%人數(單位:萬人)
numberOfPeople=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63];
%機動車數(單位:萬輛)
numberOfAutomobile=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1];
%公路面積(單位:萬平方公里)
roadArea=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 0.56 0.59 0.59 0.67 0.69 0.79];
%公路客運量(單位:萬人)
passengerVolume = [5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 22598 25107 33442 36836 40548 42927 43462];
%公路貨運量(單位:萬噸)
freightVolume = [1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804];

%輸入資料矩陣
p = [numberOfPeople; numberOfAutomobile; roadArea];
%目標(輸出)資料矩陣
t = [passengerVolume; freightVolume];

%對訓練集中的輸入資料矩陣和目標資料矩陣進行歸一化處理
[pn, inputStr] = mapminmax(p);
[tn, outputStr] = mapminmax(t);

%建立BP神經網路
net = newff(pn, tn, [3 7 2], {'purelin', 'logsig', 'purelin'});

%每10輪迴顯示一次結果
net.trainParam.show = 10;

%最大訓練次數
net.trainParam.epochs = 5000;

%網路的學習速率
net.trainParam.lr = 0.05;

%訓練網路所要達到的目標誤差
net.trainParam.goal = 0.65 * 10^(-3);

%網路誤差如果連續6次迭代都沒變化,則matlab會預設終止訓練。為了讓程式繼續執行,用以下命令取消這條設定
net.divideFcn = '';

%開始訓練網路
net = train(net, pn, tn);

%使用訓練好的網路,基於訓練集的資料對BP網路進行模擬得到網路輸出結果
%(因為輸入樣本(訓練集)容量較少,否則一般必須用新鮮資料進行模擬測試)
answer = sim(net, pn);

%反歸一化
answer1 = mapminmax('reverse', answer, outputStr);

%繪製測試樣本神經網路輸出和實際樣本輸出的對比圖(figure(1))-------------------------------------------
t = 1990:2009;

%測試樣本網路輸出客運量
a1 = answer1(1,:); 
%測試樣本網路輸出貨運量
a2 = answer1(2,:);

figure(1);
subplot(2, 1, 1); plot(t, a1, 'ro', t, passengerVolume, 'b+');
legend('網路輸出客運量', '實際客運量');
xlabel('年份'); ylabel('客運量/萬人');
title('神經網路客運量學習與測試對比圖');
grid on;

subplot(2, 1, 2); plot(t, a2, 'ro', t, freightVolume, 'b+');
legend('網路輸出貨運量', '實際貨運量');
xlabel('年份'); ylabel('貨運量/萬噸');
title('神經網路貨運量學習與測試對比圖');
grid on;

%使用訓練好的神經網路對新輸入資料進行預測

%新輸入資料(2010年和2011年的相關資料)
newInput = [73.39 75.55; 3.9635 4.0975; 0.9880 1.0268]; 

%利用原始輸入資料(訓練集的輸入資料)的歸一化引數對新輸入資料進行歸一化
newInput = mapminmax('apply', newInput, inputStr);

%進行模擬
newOutput = sim(net, newInput);

%反歸一化
newOutput = mapminmax('reverse',newOutput, outputStr);

disp('預測2010和2011年的公路客運量分別為(單位:萬人):');
newOutput(1,:)
disp('預測2010和2011年的公路貨運量分別為(單位:萬噸):');
newOutput(2,:)

%在figure(1)的基礎上繪製2010和2011年的預測情況-------------------------------------------------------
figure(2);
t1 = 1990:2011;

subplot(2, 1, 1); plot(t1, [a1 newOutput(1,:)], 'ro', t, passengerVolume, 'b+');
legend('網路輸出客運量', '實際客運量');
xlabel('年份'); ylabel('客運量/萬人');
title('神經網路客運量學習與測試對比圖(添加了預測資料)');
grid on;

subplot(2, 1, 2); plot(t1, [a2 newOutput(2,:)], 'ro', t, freightVolume, 'b+');
legend('網路輸出貨運量', '實際貨運量');
xlabel('年份'); ylabel('貨運量/萬噸');
title('神經網路貨運量學習與測試對比圖(添加了預測資料)');
grid on;

5. 執行結果

預測2010和2011年的公路客運量分別為(單位:萬人):

ans =

1.0e+04 *

4.4384 4.4656

預測2010和2011年的公路貨運量分別為(單位:萬噸):

ans =

1.0e+04 *

2.1042 2.1139

6. 繪製的影象

  1. figure(1)
    11

  2. figure(2)
    12

相關推薦

MATLAB神經網路程式設計(七)——BP神經網路實現

《MATLAB神經網路程式設計》 化學工業出版社 讀書筆記 第四章 前向型神經網路 4.3 BP傳播網路 本文是《MATLAB神經網路程式設計》書籍的閱讀筆記,其中涉及的原始碼、公式、原理都來自此書,若有不理解之處請參閱原書 本文講述BP網路常

單隱層BP神經網路C++實現

    這幾天抽時間學習了一下很久之前就想學習的BP神經網路。通過閱讀西瓜書的神經網路部分的原理和參考了網上幾篇部落格,我自己用C++編寫、實現了一個單隱層BP神經網路。     簡單畫了個示意圖,好理解下面給出的公式:(注意:圖中省略了其他的節點之間的連

BP神經網路 MATLAB源程式

和以前的習慣一樣,只舉典例,然後給程式和執行結果進行說明。 問題背景是: 給定某地區20年的資料,6列,21行,第一列值為年份,第二列為人數,第三列為機動車數量,第四列為公路面積,第五列為公路客運量,第六列為公路貨運量,這20年是1990年到2009年,現在給我們2010和2011年,第二、

機器學習之BP神經網路演算法實現影象分類

BP 演算法是一個迭代演算法,它的基本思想為:(1) 先計算每一層的狀態和啟用值,直到最後一層(即訊號是前向傳播的);(2) 計算每一層的誤差,誤差的計算過程是從最後一層向前推進的(這就是反向傳播演算法名字的由來);(3) 更新引數(目標是誤差變小),迭代前面兩

一個簡單的BP神經網路matlab程式(附函式詳解)

說明:20180604更新2、本人對其中涉及到的函式進行了詳細說明。3、此程式中部分函式的使用方式是高版本Matlab中不推薦的文中給出了當前高版本Matlab中的使用方式,並給出了相關部落格地址,具體如下:4、使用過程中,可能出現的問題5、所需的IRIS資料集具體程式如下:

Bp神經網路+C++實現

0 前言   神經網路在我印象中一直比較神祕,正好最近學習了神經網路,特別是對Bp神經網路有了比較深入的瞭解,因此,總結以下心得,希望對後來者有所幫助。   神經網路在機器學習中應用比較廣泛,比如函式逼近,模式識別,分類,資料壓縮,資料探勘等領域。神經

最簡單的三層神經網路Matlab實現

W = randn(n,H); % weight for hidden layer, W(:,i) is the weight vector for unit i b = randn(H,1); % bias for hidden layer wo = randn(H,1); %weight for out

Java實現BP神經網路實現對空氣質量的分析和評級

使用java實現BP神經網路進行迴歸分析,並利用訓練好的神經網路實現空氣質量的評級。 本實驗的工程專案和訓練資料集可訪問以下網址下載: 實驗描述: 對指定資料集進行迴歸分析,選擇適當的迴歸演算法,編寫程式實現,提交程式和結果報告。 資料集: AirQualityU

BP神經網路實現

一 BP神經網路的基本結構 在神經網路中,輸入層由資料集的某個向量x和一個偏置b構成,該向量需要乘以同緯度的權重向量w,累加得到下一層神經元的一個輸入標量,該標量乘以啟用函式得到下一層神經元的輸入。 該結構分為以下幾個部分。 二 BP神

BP神經網路 c++實現

#include <iostream> #include <cmath> #include "stdio.h" #include "stdlib.h" #include "time.h" using namespace std;

BP神經網路java實現,按照演算法步驟也參考網上相關資源寫的,若君有高見,非常歡迎指教

for(int i=0;i<hidN;i++){for(int j=0;j<=inN;j++){wyh[i][j]=Math.random()-0.5;//初始化權值和閾值//System.out.println(wyh[i][j]);}}//System.out.println();wyo=ne

BP神經網路Python實現異或問題

# -*- coding: UTF-8 -*- import matplotlib as mpl import numpy as np import matplotlib.pyplot as plt #BP神經網路實現異或問題 X=np.array([[1,0,0]

BP神經網路MATLAB實現案例一

眾做周知,BP神經網路是最常用的一種神經網路。 本文主要講解%實現對玫瑰的識別%案例。 關於神經網路的介紹與BP的詳解,論壇裡鋪天蓋地,不在此贅述。 一.BP簡述 簡要概括一下: 一

BP神經網路學習及matlab實現

什麼是神經網路? 神經網路是由很多神經元組成的,首先我們看一下,什麼是神經元 上面這個圖表示的就是一個神經元,我們不管其它書上說的那些什麼樹突,軸突的。我用個比較粗淺的解釋,可能不太全面科學,但對初學者很容易理解: 1、我們把輸入訊號看成你在matlab中需要輸入的資料,

BP神經網路原理與matlab實現

個人部落格文章連結: http://www.huqj.top/article?id=166 BP神經網路,即“反向傳播”神經網路,是一種被廣泛運用的人工神經網路,它的思想就是通過反向傳播不斷調整模型權重,最終使得模型輸出與預期輸出的誤差控制在一個小範圍內。其中反向傳播的演算法(BP演算

matlab+BP神經網路實現手寫體數字識別

個人部落格文章連結:http://www.huqj.top/article?id=168 接著上一篇所說的 BP神經網路,現在用它來實現一個手寫體數字的識別程式,訓練素材來自吳恩達機器學習課程,我把打包好上傳到了網盤上: 1 2 連結:htt

Matlab實現BP神經網路和RBF神經網路(一)

本實驗依託於教材《模式分類》第二版第六章(公式符號與書中一致) 實驗內容: 設計編寫BP神經網路和RBF神經網路,對給定資料集進行分類測試,並將分類準確率與SVM進行對比。 實驗環境: matlab2016a 資料集: 資料集大小3*30

BP神經網路MATLAB實現案例二

** 歡迎來的菜市場!!! ** 你現在手裡有一袋子雞腿(j),一袋子葡萄(t),要去換人家的西瓜(h) 假設雞腿20元/斤,葡萄17元/斤,西瓜2元/斤 也就是h=(20j+17t)/2

BP神經網路Matlab實現——人工智慧演算法

這幾天在各大媒體上接觸到了人工智慧機器學習,覺得很有意思,於是開始入門最簡單的機器演算法——神經網路訓練演算法(Neural Network Training);以前一直覺得機器學習很高深,到處是超高等數學、線性代數、數理統計。入坑發現確實是這樣!但是呢由專案例

bp神經網路matlab實現

%讀取訓練資料 [f1,f2,f3,f4,class] = textread('trainData.txt' , '%f%f%f%f%f',150); %特徵值歸一化 [input,minI,maxI] = premnmx( [f1 , f2 , f3 , f4 ]') ;%構造輸出矩陣 s = leng