Error using Deep Learning model LSTM
2 ビュー (過去 30 日間)
古いコメントを表示
Hi eveyrone
I am getting error when I run my code. I am new to MATLAB so I am not sure how to fix this issue. I got the code from this book and I copied it as exactly as it is presented but only changed the how the data was created. The book made up data but I used actual stock data. Other than this, the codes are the same:
Can someone help me fix this issue?
Error:
Error using trainNetwork (line 191)
The training sequences are of feature dimension 2122 but the input layer expects sequences of
feature dimension 1.
Error in ForecastVolatilityLSTM (line 92)
net = trainNetwork(xTrain,yTrain,layers,options);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Code:
% LSTM
layerSet = 'two lstm';
n = length(CIV.COMPOSITE_IMPLIED_VOLATILITY);
nTrain = floor(0.8*n);
sTrain = CIV.COMPOSITE_IMPLIED_VOLATILITY(1:nTrain);
sTest = CIV.COMPOSITE_IMPLIED_VOLATILITY(nTrain+1:n);
sVal = sTest;
mu = mean(sTrain);
sigma = std(sTrain);
sTrainNorm = (sTrain-mu)/sigma;
sTestNorm = (sTest-mu)/sigma;
sTest = sTestNorm(1:end-1);
xTrain = sTrainNorm(1:end-1);
yTrain = sTrainNorm(2:end);
muVal = mean(sVal);
sigmaVal = std(sVal);
sValNorm = (sVal-muVal)/sigmaVal;
xVal = sValNorm(1:end-1);
yVal = sValNorm(2:end);
numFeatures = 1;
numResponses = 1;
numHiddenUnits = 200;
switch layerSet
case 'lstm'
layers = [sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
case 'bilstm'
layers = [sequenceInputLayer(numFeatures)
bilstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
case 'two lstm'
layers = [sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits)
reluLayer
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
otherwise
error('Only 3 sets of layers are available');
end
analyzeNetwork(layers);
options = trainingOptions('adam', ...
'MaxEpochs',300, ...
'ExecutionEnvironment','gpu', ...
'GradientThreshold',1, ...
'InitialLearnRate',0.005, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',125, ...
'LearnRateDropFactor',0.2, ...
'Shuffle','every-epoch', ...
'ValidationData',{xVal, yVal}, ...
'ValidationFrequency',5, ...
'Verbose',0, ...
'Plots','training-progress');
net = trainNetwork(xTrain,yTrain,layers,options);
Variables:

CIV table:

Thank you
0 件のコメント
回答 (2 件)
Walter Roberson
2024 年 12 月 9 日
https://www.mathworks.com/help/deeplearning/ref/trainnetwork.html#mw_36a68d96-8505-4b8d-b338-44e1efa9cc5e defines for the sequences input:
Numeric or Cell Array
Vector sequences
c-by-s matrices, where c is the number of features of the sequences and s is the sequence length.
Your xtrain is 2122 x 1, so that represents c = 2122 the number of features in the sequence, and 1 is the sequence length.
But you specified
numFeatures = 1;
%...
layers = [sequenceInputLayer(numFeatures)
so your code is expecting a sequence with 1 feature.
If you really want 1 feature, then you need to call
net = trainNetwork(xTrain.',yTrain.',layers,options);
Joss Knight
2024 年 12 月 9 日
移動済み: Walter Roberson
2024 年 12 月 10 日
This error is because you are analyzing your network as a dlnetwork, which does not support output layers.
It depends on how you opened the Analyzer app. If you opened it from Deep Network Designer, then to analyze a DAGNetwork you need to use the -v1 option to deepNetworkDesigner to get the legacy behaviour:
If you opened the App by calling analyzeNetwork, you need to add the option TargetUsage="trainNetwork" to get the legacy behaviour.
trainNetwork and DAGNetwork are no longer recommended, so ideally you should update your code to using trainnet and dlnetwork.
10 件のコメント
Joss Knight
2024 年 12 月 11 日
編集済み: Joss Knight
2024 年 12 月 11 日
I understand. I'm saying it is too much to ask - for me. You're going to have to read documentation, read the code you're adapting, learn what it's doing, and make some straightforward changes as I listed. But maybe someone else will help more directly.
Alternatively, just continue to use DAGNetwork and trainNetwork with the workarounds I gave you (-v1 option to deepNetworkDesigner, TargetUsage="trainNetwork" option to analyzeNetwork). Or downgrade MATLAB to R2023b or earlier.
参考
カテゴリ
Help Center および File Exchange で Deep Learning Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!