如果經過訓練,出現隱含層到輸出層無連接,說明輸入的數據和輸出的數據之間無法進行求解,要更改輸入和輸出值。
例如:
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查看神經網絡結構,發現從隱含層到輸出層少了連接,想了解下這種情況是什麼原因,應該怎麼修改?
正常的函數擬合神經網絡,應該是從input到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)
參考資料: