神經網絡學習——fitnet函數擬合

如果經過訓練,出現隱含層到輸出層無連接,說明輸入的數據和輸出的數據之間無法進行求解,要更改輸入和輸出值。

例如:

a=rand(1,10);
train_x=[a;a+10;a+20];
for i = 1 : size(train_x,1)
train_y(i)=sum(train_x(i,:).^2);
end
% QNet_eval = fitnet([40,40]);

x = train_x'; y = train_y;

總代碼:

rng(0)

a=rand(1,10);
train_x=[a;a+10;a+20];
for i = 1 : size(train_x,1)
train_y(i)=sum(train_x(i,:).^2);
end
% QNet_eval = fitnet([40,40]);

x = train_x'; y = train_y;

% 一個隱藏層,神經元數爲5
hiddenLayerSize = [40,40];

% 訓練函數爲 trainlm
trainFcn = 'trainlm';

% 初始化網絡
net = fitnet(hiddenLayerSize,trainFcn);

% 設置比例
% net.divideParam.trainRatio = 70/100;
% net.divideParam.valRatio = 15/100;
% net.divideParam.testRatio = 15/100;

% 訓練網絡
[net,tr] = train(net,x,y);

% 計算所有訓練樣本預測值
yp = sim(net,x);

% 計算總體均方誤差
performance = perform(net,y,yp);

% 查看網絡結構
view(net)

原問題:

最近,在學習神經網絡計算,應用到fitnet函數,在調用fitnet函數擬合神經網絡時候,通過view查看神經網絡結構,發現從隱含層到輸出層少了連接,想了解下這種情況是什麼原因,應該怎麼修改?

隱含層到output缺少連接線
標題

正常的函數擬合神經網絡,應該是從input到output全過程連接的,比如這樣:

隱含層到output有連接線
標題

代碼如下:

load S1.mat
%S1裏有sample數據,數據格式 80*25,取前11列數據

P_len = 10;

% 轉置
% x = X'; y = Y';
x = sample(:, 1:P_len)'; y = sample(:, P_len+1)';

% 一個隱藏層,神經元數爲5
hiddenLayerSize = 5;

% 訓練函數爲 trainlm
trainFcn = 'trainlm';

% 初始化網絡
net = fitnet(hiddenLayerSize,trainFcn);

% 設置比例
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

% 訓練網絡
[net,tr] = train(net,x,y);

% 計算所有訓練樣本預測值
yp = sim(net,x);

% 計算總體均方誤差
performance = perform(net,y,yp);

% 查看網絡結構
view(net)

參考資料:

https://blog.csdn.net/qq_43575267/article/details/95337353?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章