车辆轨迹预测训练时mini-batch格式错误排查求助
车辆轨迹预测任务Mini-batch格式不匹配问题排查与解决
问题背景
车辆轨迹预测任务:使用t-30时刻序列数据预测t+30时刻轨迹,数据维度与格式如下:
- 邻居占用矩阵:
13×3×1×30×138634(13×3网格、1通道、30序列长度、138634样本数),格式SSCTB - 目标车辆数组:
30×3×138634(30序列长度、3代表(x,y,v)、138634样本数),格式TCB
训练触发错误:
Error forming mini-batch for network input "sequenceinput". Data interpreted with format "SSCTB". To specify a different format, use the InputDataFormats option.
Error in main (line 488)
trainnedNet = trainnet(TrainDS,net,"l2loss",options);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Caused by:
Batch dimension of datastore must match the format batch dimension (5).
问题根源
- Datastore使用错误:原代码将整个训练集打包为单个cell存储,
signalDatastore读取后仅生成1个数据条目,trainnet无法拆分出mini-batch,导致batch维度不匹配。 - ValidationData参数格式错误:组合后的验证集datastore已包含输入与标签,无需单独传入标签datastore。
- 未指定输出数据格式:损失函数无法正确解析标签的维度格式。
修正方案
1. 重构数据存储与Datastore创建
替换原代码中save与datastore创建部分,改用arrayDatastore按样本维度拆分数据:
% 加载数据后直接处理数组,无需打包为cell X1Train = permute(input_neigh_odd(:,:,:,:,trainIdx), [1 2 3 5 4]); % 转为SSCTB格式:(13,3,1,30,Batch) X2Train = input_target_odd_centered(:,:,trainIdx); % TCB格式:(30,3,Batch) YTrain = input_target_even_centered(:,:,trainIdx); % TCB格式:(30,3,Batch) X1Val = permute(input_neigh_odd(:,:,:,:,valIdx), [1 2 3 5 4]); X2Val = input_target_odd_centered(:,:,valIdx); YVal = input_target_even_centered(:,:,valIdx); % 使用arrayDatastore按batch维度拆分样本 dsX1Train = arrayDatastore(X1Train, 'IterationDimension', 5); % 第5维为batch,每次迭代取1个样本 dsX2Train = arrayDatastore(X2Train, 'IterationDimension', 3); % 第3维为batch dsYTrain = arrayDatastore(YTrain, 'IterationDimension', 3); dsX1Val = arrayDatastore(X1Val, 'IterationDimension', 5); dsX2Val = arrayDatastore(X2Val, 'IterationDimension', 3); dsYVal = arrayDatastore(YVal, 'IterationDimension', 3); % 组合输入与标签 TrainDS = combine(dsX1Train, dsX2Train, dsYTrain); ValDS = combine(dsX1Val, dsX2Val, dsYVal);
2. 修正trainingOptions参数
调整ValidationData格式,新增OutputDataFormat指定标签格式:
alpha = 0.001; options = trainingOptions( ... "adam", ... "InputDataFormats", {'SSCTB', 'TCB'},... "OutputDataFormat", 'TCB', % 指定输出标签的格式为TCB Plots="training-progress", ... ValidationData = ValDS, % 直接传入组合后的验证集(输入+标签) ValidationFrequency = 100, ... ValidationPatience = 5, ... ExecutionEnvironment = "parallel-auto",... MaxEpochs = 15,... InitialLearnRate=alpha,... MiniBatchSize=256,... L2Regularization=0.0001,... Verbose=false);
3. 确认网络输入层匹配
原网络输入层与数据格式已匹配,无需修改:
sequenceInputLayer([13 3 1])对应SSCTB的空间维度与通道数sequenceInputLayer(3)对应TCB的特征维度
内容的提问来源于stack exchange,提问作者Barbaros Teoman Kosoglu
相关产品推荐
相关产品推荐

