clear
close all
clc
% 指定存储数据文件的文件夹路径
folderPath = 'D:\qihuitec\FUK';
% 获取文件夹中所有符合特定格式的文件名
filePattern = fullfile(folderPath, 'AAA*.mat');
fileList = dir(filePattern);
% 初始化时间数组
rawTimes = datetime.empty;
% 初始化数据元胞数组
data = cell(length(fileList), 1);
% 循环遍历每个文件名,提取时间信息并导入数据
for i = 1:length(fileList)
fileName = fileList(i).name;
% 提取文件名中的时间部分
timeStr = extractBetween(fileName, 'AAA', '.mat');
% 将提取的字符串转换为datetime类型
time = datetime(timeStr, 'InputFormat', 'yyyyMMddHHmmss');
% 将转换后的时间添加到时间数组中
rawTimes = [rawTimes; time];
% 导入对应的数据文件
filePath = fullfile(folderPath, fileName);
loadedData = load(filePath);
% 获取结构体中的字段名,假设只有一个字段(即一个矩阵变量)
varName = fieldnames(loadedData);
if isscalar(varName)
data{i} = loadedData.(varName{1});
else
error(['文件 ', fileName, ' 中包含多个变量或没有变量,请检查。']);
end
end
% 将数据转换为适合 LSTM 输入的格式
matrixSize = size(data{1});
inputData = zeros(length(fileList), prod(matrixSize));
for i = 1:length(fileList)
inputData(i, :) = data{i}(:);
end
% 划分训练集和测试集(这里简单按 80% 训练,20% 测试划分)
trainRatio = 0.8;
trainSize = floor(trainRatio * length(fileList));
trainData = inputData(1:trainSize, :);
testData = inputData(trainSize+1:end, :);
% 准备 LSTM 输入和目标数据
sequenceLength = 10; % 序列长度
numFeatures = size(trainData, 2); % 确保 numFeatures 是每个时间步的特征数量
numSequencesTrain = size(trainData, 1) - sequenceLength;
numSequencesTest = size(testData, 1) - sequenceLength;
XTrain = zeros(numSequencesTrain, sequenceLength, numFeatures);
YTrain = zeros(numSequencesTrain, numFeatures);
XTest = zeros(numSequencesTest, sequenceLength, numFeatures);
YTest = zeros(numSequencesTest, numFeatures);
for i = 1:numSequencesTrain
XTrain(i, :, :) = trainData(i:i+sequenceLength-1, :);
YTrain(i, :) = trainData(i+sequenceLength, :);
end
for i = 1:numSequencesTest
XTest(i, :, :) = testData(i:i+sequenceLength-1, :);
YTest(i, :) = testData(i+sequenceLength, :);
end
% 构建 LSTM 网络
layers = [
sequenceInputLayer(numFeatures)
lstmLayer(128, 'OutputMode', 'last')
fullyConnectedLayer(numFeatures)
regressionLayer];
options = trainingOptions('adam', ...
'MaxEpochs', 100, ...
'MiniBatchSize', 64, ...
'Shuffle', 'never', ...
'Verbose', false);
% 训练模型
net = trainNetwork(XTrain, YTrain, layers, options);
% 进行预测
YPred = predict(net, XTest);
% 计算均方误差评估模型性能
mse = mean((YPred - YTest).^2, 'all');
disp(['均方误差: ', num2str(mse)]);
matlab报错:错误使用 trainNetwork (第 191 行) 训练序列具有特征维度 82 10,但输入层需要特征维度为 1442401 的序列。
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
阿里嘎多学长 2025-04-01 23:07关注阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
解答
你在使用
trainNetwork函数训练序列时遇到了错误,错误信息是:错误使用trainNetwork(第 191 行) 训练序列具有特征维度 82 10,但输入层需要特征维度为 1442401 的序列。问题的原因是,你的输入数据的维度不匹配。
trainNetwork函数需要输入数据的维度与网络的输入层的维度相匹配。解决方案:
- 检查你的输入数据的维度是否正确。如果你的输入数据的维度是 82 10,需要将其转换为 1442401 的维度。
- 如果你的输入数据的维度是正确的,可以检查网络的输入层的维度是否正确。如果输入层的维度是 1442401,需要将其调整为与输入数据的维度相匹配。
例如,如果你的输入数据的维度是 82 10,你可以使用
reshape函数将其转换为 1442401 的维度:inputData = reshape(inputData, [1 1442401]);代码
% ... % 将输入数据reshape为1442401维度 inputData = reshape(inputData, [1 1442401]); % ... % 训练网络 net = trainNetwork(inputData, targetData, layers, options);备注
请注意,这只是一个可能的解决方案,具体的解决方案取决于你的具体情况。如果你需要更多帮助,请提供更多的代码和数据信息。
解决 无用评论 打赏 举报