How to apply a 2D matrix input to a trainNetwork?

조회 수: 14 (최근 30일)
vipin
vipin 2023년 9월 6일
댓글: Joss Knight 2023년 9월 8일
I have the following piece of code for training a network:
layers = [
sequenceInputLayer(5)
flattenLayer
lstmLayer(128)
dropoutLayer(0.1)
fullyConnectedLayer(1)
regressionLayer
];
maxEpochs = 100;
options = trainingOptions('adam', ...
'ExecutionEnvironment','gpu', ...
'SequenceLength','longest', ...
'Shuffle','never', ...
'Plots','training-progress');
net = trainNetwork(xt,yt,layers,options);
screenshot of a sample xt and yt is given below:
xt and yt
Basically each yt corresponds to a 3 by 5 matrix in xt. where 3 is the number of rows in the sequence and 5 is the number of features. Basically xt contains a sequence of stock prices - the 4 prices and volume, after scaling. yt corresponds to future close price.
I want to train the network with this. And I have tried various combinations, reshaping, converting it to cells etc. But its one error or the other.
Does someone know if its possible to do what I am trying to do? I am using version 2020b.
The current error is:
Error using trainNetwork (line 183)
The training sequences are of feature dimension 4 5 but the input layer expects sequences of feature dimension 5.

답변 (1개)

Joss Knight
Joss Knight 2023년 9월 8일
Typically sequence data is passed in as a cell array. In each cell you would be passing one sequence. If you want to pass a single numeric array then I think all you need to do is permute dims 1 and 2 - you have to put the features down the columns, i.e. each column is an observation. Arrangement is C-by-B-by-T.
  댓글 수: 2
Matt J
Matt J 2023년 9월 8일
편집: Matt J 2023년 9월 8일
Arrangement is C-by-B-by-T.
I have to agree with the OP. I don't see anywhere in the documentation that indicates that.
It is also a bit puzzling to me that trainNetwork cannot accept formatted dlarrays as input. That would let the user decide which dimensions are to be interpreted as S, C, B,T etc... and save much confusion.
Joss Knight
Joss Knight 2023년 9월 8일
Glad to hear an advocate for dlarray format labels!!
No, DAGNetwork APIs do not interact with dlarrays. They are for autodiff. Prepare yourself for upcoming R2023b to see that solution.
My understanding is that the intention is that you pass in a numeric array if you want to process a single sequence for inference, otherwise it's really intended that you use cell arrays. The documentation, in a noble attempt to provide information about every single possible kind of input data, says the data should be a
"c-by-s matrix, where c is the number of features of the sequence and s is the sequence length."
While the format of the responses for sequence-to-vector regression should be a
"Numeric row vector"
These are then put into cell arrays, one per observation.
Also, now that I look at it, the flatten layer doesn't seem right, and you'd need to unfold the sequence to pass through the fullyConnectedLayer. But shouldn't the lstmLayer be in OutputMode 'last' for that to work?
I guess I'll just defer to someone who knows more about sequence networks and stop interfering...

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Custom Training Loops에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by