我在matlab中做了一個簡單的前饋神經網路如下:
mynet = feedforwardnet(5)
mynet.layers{1}.transferFcn = 'poslin'; % one hidden layer(5 neurons) with poslin = ReLU activation function
mynet.layers{2}.transferFcn = 'purelin'; % last layer has simply linear activation function
我想訓練這個神經網路來學習一個看起來像這樣的非線性函式: 原始函式。所以基本上這是一個回歸問題。我們有兩個輸入(u1,u2)和一個輸出(y)。
神經網路經過訓練,現在要估計輸出,我們可以簡單地執行以下操作:
input = [3;2] % u1 = 3, u2 = 2
y_predicted = mynet([input]) % gives the output for a input
這給出了 y_predicted = 2.9155。好吧,那很好。預測很好(因為 y_true = 3)。但我不明白這個價值是怎么來的。
然后當我通過前向傳播手動檢查它時,我得到了不同的結果。也就是說,我通過以下方式提取了訓練后的最終權重和偏差:
W1 = mynet.IW{1,1}; b1 = mynet.b{1}; W2 = mynet.LW{2,1}; b2 = mynet.b{2}
然后做了前向傳播:
Z1 = W1*[3; 2] b1;
A1 = poslin(Z1); % applying ReLU activation function
Z2 = W2*A1 b2;
A2 = Z2; % linear activation function
y_predicted = A2;
現在我得到 (y_predicted = 2.2549)。這里不是一個好的預測,但我理解這個價值是如何來的。
兩個預測值不應該相同嗎?我錯過了什么嗎?
uj5u.com熱心網友回復:
y_predicted = 2.9155
不是度量標準(因此不是準確性)。這是您的模型估計的數字。如果您試圖近似某個函式,那么您需要計算Mean squared error或 root mean squared error。假設您的輸入值是3(在這種情況下y_true = 3),而您的預測值則是2.9155您的MSE = 0.00714. 因此,如果 MSE 較低,那么您的模型將更好地近似函式。
現在來回答您的問題:在訓練期間,反向傳播用于糾正由這些權重引起的權重/錯誤。但是,在測驗/預測階段,我們不會調整權重。因此,這只是向前邁出的一步。
準確率永遠不會高于 1。它是一個介于 0 和 1 之間的值,用于分類案例。您正在使用回歸,并且需要按照上面的說明計算 MSE。MSE 越低,您的模型越好。
uj5u.com熱心網友回復:
這是由于輸入和輸出的預處理而發生的,當您在 Matlab 中創建前饋網路時,默認情況下會發生這種情況。因此,在手動檢查時,我們沒有考慮到這一點并直接提供原始資料。
參考
停用它們后問題已解決:
mynet.input.processFcns = {};
mynet.output.processFcns = {};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/318512.html
