《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. 繪製的影象
- figure(1)
2. figure(2)
3. figure(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. 繪製的影象
- figure(1)
- figure(2)
相關推薦
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