trainnetwork函数支持图像、序列、特征向量及多输入混合数据的端到端训练。1、图像数据需4维数组或imagedatastore;2、序列数据用cell或t×n矩阵;3、特征数据为m×n矩阵;4、混合数据需combine多个datastore;5、可返回info结构体获取训练动态与梯度信息。

一、使用trainNetwork函数训练图像分类网络
如果您尝试在MATLAB中构建并训练一个用于图像分类任务的神经网络,trainNetwork函数可直接接受图像数据、网络层结构和训练选项作为输入。该函数自动执行前向传播、损失计算、反向传播与参数更新流程,适用于卷积神经网络(CNN)等典型图像模型。
1、准备图像数据:将训练图像组织为4维数组,格式为[height width channel batch],或使用imageDatastore加载。
2、定义网络层:使用layerGraph或layers序列指定输入层、卷积层、批量归一化层、ReLU层、全连接层、分类层等。
3、配置训练选项:调用trainingOptions函数设置求解器(如'sgd'或'adam')、最大迭代次数、小批量大小、学习率等参数。
4、调用trainNetwork:传入图像数据、层结构和训练选项,例如:net = trainNetwork(imdsTrain,layers,options)。
二、使用trainNetwork函数训练序列数据网络
当处理时间序列或文本序列等一维时序数据时,trainNetwork支持LSTM、GRU等循环层结构,并要求输入为N×1的cell数组或T×N的二维矩阵。函数会依据层定义中的序列输入层自动适配时序维度处理逻辑。
1、准备序列数据:确保每个样本为列向量或行向量,所有样本放入cell数组中,或统一为T×N矩阵(T为时间步数,N为样本数)。
2、定义含序列输入的网络:包含sequenceInputLayer、lstmLayer、dropoutLayer、fullyConnectedLayer、softmaxLayer和classificationLayer。
3、设置序列相关选项:在trainingOptions中指定'MaxEpochs'、'InitialLearnRate',并建议启用'Shuffle','every-epoch'以提升泛化性。
4、执行训练:调用net = trainNetwork(sequences,layers,options),其中sequences为cell数组或矩阵形式的序列集。
三、使用trainNetwork函数训练特征向量网络
对于表格型或手工提取的特征数据(如统计特征、嵌入向量),trainNetwork可直接接受数值矩阵作为输入,每列为一个样本,每行为一个特征维度。此时网络通常采用全连接结构(MLP),无需空间或时序建模组件。
1、组织特征数据:构造M×N矩阵features,其中M为特征数,N为样本数;响应变量responses应为N×1向量或categorical数组。
2、定义特征输入网络:起始层为featureInputLayer(指定InputSize为M),后接多个fullyConnectedLayer、batchNormalizationLayer和reluLayer。
3、指定损失函数类型:分类任务用'classification',回归任务用'regression',该选择隐含于最终层类型(classificationLayer或regressionLayer)中。
4、启动训练:使用net = trainNetwork(features,responses,layers,options)进行端到端训练。
四、使用trainNetwork处理多输入混合数据
当网络需同时接收图像与标量特征(如角度、温度等辅助信息)时,trainNetwork支持mixed格式输入,要求将不同模态数据封装为元胞数组或组合数据存储。各输入分支需在层图中明确定义对应输入层及路径。
1、分别创建数据存储:对图像使用arrayDatastore(指定IterationDimension=4),对标量特征使用arrayDatastore(默认IterationDimension=1)。
2、合并数据源:调用combine函数将多个datastore组合为单一mixed datastore,确保各样本索引对齐。
3、构建带分支的layerGraph:包含多个inputLayer,通过layerGraph.addLayers与connectLayers实现跨分支连接,例如concatenationLayer。
4、训练调用:使用net = trainNetwork(mixed,layers,options),其中mixed为combine生成的数据存储对象。
五、获取训练过程信息与中间结果
若需监控训练动态或调试收敛行为,trainNetwork函数支持返回训练过程信息结构体info,包含每轮迭代的损失、准确率及梯度范数等字段。该信息不依赖额外回调,仅需在调用时声明双输出形式。
1、修改函数调用签名:将原本的net = trainNetwork(...)改为[net,info] = trainNetwork(...)。
2、检查info.TrainingLoss与info.ValidationAccuracy字段:二者均为数值向量,长度等于实际训练轮数。
3、绘制训练曲线:使用plot(info.Iteration,info.TrainingLoss)可视化损失下降趋势。
4、访问逐层梯度:info.GradientNorms为元胞数组,每个元素对应一轮迭代中各可学习层的梯度L2范数,可用于判断梯度消失或爆炸现象。











