You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MATLAB中LSTM网络实现QoS预测及报错解决

问题解决:trainNetwork参数过多报错及QoS预测代码修正

核心报错原因

trainNetwork要求输入的训练数据格式匹配序列模型要求,你当前传入的x_train和y_train是table类型,未转换为序列模型所需的三维数组(时间步×特征数×样本数)或cell数组,导致Matlab解析参数时出错。另外代码中还有两个未定义的超参数需要补全。

具体修正步骤

1. 补全未定义的超参数

在trainingOptions代码块前,添加超参数的具体定义:

maxEpochs = 50;
miniBatchSize = 32;

2. 转换训练数据为序列兼容格式

将table类型的输入输出数据转换为三维数组(适配序列模型的输入要求):

% 将table转为数值矩阵
x_matrix = table2array(x);
y_matrix = table2array(y);

% 重构为序列格式:时间步×特征数×样本数
x_seq = permute(reshape(x_matrix', 10, 1, []), [2,1,3]);
y_seq = permute(reshape(y_matrix', 10, 1, []), [2,1,3]);

% 重新划分训练测试集
height_x = size(x_seq,3);
split = fix(height_x*0.8);
x_train = x_seq(:,:,1:split);
x_test = x_seq(:,:,split+1:end); 
y_train = y_seq(:,:,1:split);
y_test = y_seq(:,:,split+1:end);

若后续需要使用更长时间步(比如delta_x>1),只需调整reshape的维度,保持时间步×特征数×样本数的格式即可。

3. 完整修正后的代码

data = readtable('C:\Users\Etudiant FST\Documents\études\mini_pjt\d\qws1\qws1.txt');
%test_data = readtable('C:\Users\Etudiant FST\Documents\études\mini_pjt\d\qws2\qws2.txt');

data = data(:,1:10);

x = [];
y = [];

delta_x = 1; 
delta_y = 1;
pas = 1;

while (height(data) >= delta_x + delta_y)
    x = [x; data(1:delta_x,:)];
    y = [y; data(delta_x + 1:delta_x + delta_y,:)];
    data(1:pas,:) = [];
end

% 转换table为序列格式数据
x_matrix = table2array(x);
y_matrix = table2array(y);
x_seq = permute(reshape(x_matrix', 10, 1, []), [2,1,3]);
y_seq = permute(reshape(y_matrix', 10, 1, []), [2,1,3]);

% 划分训练测试集
height_x = size(x_seq,3);
split = fix(height_x*0.8);
x_train = x_seq(:,:,1:split);
x_test = x_seq(:,:,split+1:end); 
y_train = y_seq(:,:,1:split);
y_test = y_seq(:,:,split+1:end);

% 定义超参数
maxEpochs = 50;
miniBatchSize = 32;

layers = [
    sequenceInputLayer(10)
    lstmLayer(128,'OutputMode','sequence')
    fullyConnectedLayer(10)
    regressionLayer];

options = trainingOptions('adam', ...
    'MaxEpochs',maxEpochs, ...
    'MiniBatchSize',miniBatchSize, ...
    'InitialLearnRate',0.01, ...
    'GradientThreshold',1, ...
    'Shuffle','never', ...
    'Plots','training-progress',...
    'Verbose',0);

net = trainNetwork(x_train,y_train,layers,options);

额外优化建议

  • 若要提升预测效果,可尝试增大delta_x(比如用过去3个时间步的QoS数据预测下一个时间步),同时保持sequenceInputLayer输入维度为10,根据需求调整LSTM层的OutputMode为sequence或last。
  • 可在LSTM层后添加dropoutLayer(0.2),防止模型过拟合。

内容的提问来源于stack exchange,提问作者Imene Bengamra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:13