Training with trainNetwork failed. The value of 'ValidationData' is invalid. The datastore used for 'ValidationData' must return a table or cell array 2 columns.with at least
3 ビュー (過去 30 日間)
古いコメントを表示
Hello, I want to do classification with LSTM using Deep Network Designer. But my data consists of features in .xlsx format. I created a datastore with the code given below and did the necessary operations. After importing the data, when I click on the Training tab in the deep network designer section, "Training with trainNetwork failed. The value of 'ValidationData' is invalid. The datastore used for 'ValidationData' must return a table or cell array 2 columns with at least" error message. Can you help.
3 件のコメント
Matt J
2024 年 4 月 17 日
It is also preferred to copy/past your code rather than share a screenshot.
Yes, otherwise we cannot copy/paste it to demonstrate solutions.
採用された回答
Cris LaPierre
2024 年 4 月 18 日
Because the input must be a datastore, you need to format your input so that your five features are a column vector. Here's code that I wrote that got the training to work in the Deep Network Designer
% Load data
data = readtable('veriseti2.xlsx');
% Format data
data = convertvars(data,"Var6",'categorical');
trainingData = mergevars(data,1:5);
trainingData.Properties.VariableNames = ["Predictors","Response"];
trainingData.Predictors = rowfun(@transpose,trainingData,"InputVariables","Predictors","OutputFormat","cell");
% Create a partition that splits the data for training and validation
cv = cvpartition(height(trainingData), 'HoldOut', 0.2); % 80% training, 20% validation
% Get indices of training and validation data
trainingIdx = cv.training;
validationIdx = cv.test;
% Separate training and validation data
TrainingData = trainingData(trainingIdx, :);
ValidationData = trainingData(validationIdx, :);
% Convert training and validation data to datastore
dstrain = arrayDatastore(TrainingData,'OutputType','same'); % Training data and tags
dsvalidation = arrayDatastore(ValidationData,'OutputType','same'); % Validation data and tags
I find that, at least with your data set, having to work with datastores makes it more difficult. I would reocmmend exporting your network using the Generate Network Code without Parameters and set up your training programmatically. Here's what that might look like.
% Create a partition that splits the data for training and validation
cv = cvpartition(height(data), 'HoldOut', 0.2); % 80% training, 20% validation
% Get indices of training and validation data
trainingIdx = cv.training;
validationIdx = cv.test;
% Separate training and validation data
TrainingData = data(trainingIdx, :);
ValidationData = data(validationIdx, :);
layers = [
featureInputLayer(5,'Normalization', 'zscore')
lstmLayer(128,"Name","lstm")
dropoutLayer(0.5,"Name","dropout")
fullyConnectedLayer(4,"Name","fc")
softmaxLayer("Name","softmax")
classificationLayer("Name","classoutput")];
options = trainingOptions('adam', ...
'MiniBatchSize',128, ...
'Shuffle','every-epoch', ...
'ValidationData',ValidationData, ...
'Plots','training-progress', ...
'Verbose',false);
net = trainNetwork(TrainingData,layers,options)
1 件のコメント
Cris LaPierre
2024 年 4 月 18 日
If you do want to train in the Deep Network Designer, if you add a flatten layer, then your formatting of the input could just be
data = readtable('veriseti2.xlsx');
data = convertvars(data,"Var6",'categorical');
data = mergevars(data,1:5);
参考
カテゴリ
Help Center および File Exchange で Image Data Workflows についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!