[问题]如何在多元多步问题上应用'predictAndUpdateState' ?

13次观看(过去30天)
你好,
我有这个代码下面(也附上了一个多变量LSTM神经网络模型的数据样本)。
我试图修改它来预测未来的新步骤,但我得到了这个错误:
转换从单元格复制是不可能的。
错误在lstm_multi_films中(第82行)
[net, Yforecast(:,i)] = predictAndUpdateState(net, XTest(:,i),“ExecutionEnvironment”“cpu”);
我试着修改这条线
[net, Yforecast(:,i)] = predictAndUpdateState(net, XTest(:,i),“ExecutionEnvironment”“cpu”);
[net, Yforecast(:,i)] = predictAndUpdateState(net, XTest{:,i},“ExecutionEnvironment”“cpu”);
但我得到了一个不同的错误:
指数位置2超过数组边界(不能超过389)。
错误在lstm_multi_films中(第82行)
[net, Yforecast(:,i)] = predictAndUpdateState(net, XTest{:,i},“ExecutionEnvironment”“cpu”);
你能告诉我怎么修吗?
下面是代码:
多元多步LSTM NN模型
% From: Marcelo Olmedo—MathWorks |编辑:Mohamed Nedal
关闭所有;清晰;clc
%%导入数据
[~,~,data_train] = xlsread(“ET_1.xlsx”);
Data_mat_train = cell2mat(data_train);
XTrain = (data_mat_train(:, 4:8))';
YTrain = (data_mat_train(:, 3))';
XTrain = num2cell(XTrain, 1);
YTrain = num2cell(YTrain, 1);
miniBatchSize = 1;% 1预测器序列
定义网络架构
numResponses = size(YTrain{1}, 1);
featureDimension = size(XTrain{1}, 1);
流('输入特征的数量:%d \n'featureDimension)
流('目标特征的数量:%d \n'numResponses)
Maxepochs = 100;
miniBatchSize = 1;
numHiddenUnits = 100;
全连接层将输入乘以一个权重矩阵,然后
%添加一个偏差向量
outputSize = 500;
图层= [...
sequenceInputLayer (featureDimension)
lstmLayer (numHiddenUnits“OutputMode”“序列”
fullyConnectedLayer (outputSize)
dropoutLayer (0.1)
fullyConnectedLayer (numResponses)
regressionLayer];
options = trainingOptions(“亚当”...
“MaxEpochs”maxepochs,...
“GradientThreshold”, 1...
“InitialLearnRate”, 0.005,...
“LearnRateSchedule”“分段”...
“LearnRateDropPeriod”, 125,...
“LearnRateDropFactor”, 0.2,...
“阴谋”“训练进步”);
%%培训网络
net = trainNetwork(XTrain, YTrain, layers, options);
%%测试网络
[~,~,data_test] = xlsread(“ET_2_m_input.xlsx”);
Data_mat_test = cell2mat(data_test);
XTest = (data_mat_test(:, 4:8))';
YTest = (data_mat_test(:, 3))';
XTest = num2cell(XTest, 1);
YTest = num2cell(YTest, 1);
net = resetState(net);
YPred = predict(net, XTest);
rmse = sqrt(mean((cell2mat(YPred)' - cell2mat(YTest)).^2));
流(' rmse = %. '2 f \ n”,意味着(rmse))
% %的阴谋
y1 = (cell2mat(YTest(1:end, 1:end))');
y2 = (cell2mat(YPred(1:end, 1:end)));%必须转置成plot plot列
数字
情节(日元)
持有
情节(y2)
传奇(“测试”“预测”
%%预测未来
clc
net = resetState(net);
Yforecast = [];
numTimeStepsTest = numel(XTest) + 500;%预测未来新500步
K = 1;
i = 1:numTimeStepsTest
[net, Yforecast(:,i)] = predictAndUpdateState(net, XTest(:,i),“ExecutionEnvironment”“cpu”);
如果k ~= numel(XTest)
[net, Yforecast(:,i)] = predictAndUpdateState(net, XTest(:,i),“ExecutionEnvironment”“cpu”);
其他的
[net, Yforecast(:,i)] = predictAndUpdateState(net, Yforecast(:,i-1),“ExecutionEnvironment”“cpu”);
结束
K = K + 1;
结束
流('新数据成功预测\n'

答案(1)

拓 李
拓 李 2022年5月27日
我建议你用MATLAB来修改它。此外,您的时间步输入如何是后一个时间步,而输出如何是前一个时间步?