1. 创建训练深度神经网络的流程
具体流程参见:创建简单的深度学习网络以用于分类 - MATLAB & Simulink Example - MathWorks 中国
注意事项:
(1)用于分类时,layer的最后一般为:
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
其中,classificationLayer使用交叉熵作为loss函数。
(2)用于回归时,layer的最后一般是:
fullyConnectedLayer(1)
regressionLayer
其中,regressionLayer使用MSE作为loss函数;而根据不同的网络输入输出数据类型,MSE也有几种。三种数据类型的网络分别是:sequence-to-one regression networks,image-to-image regression networks, sequence-to-sequence regression networks。具体参见:Specify Layers of Convolutional Neural Network - MATLAB & Simulink - MathWorks 中国
2. 指定训练选项时,'Plots','training-progress' ,查看训练进度
使用一个例子来说明用函数 trainingOptions指定的训练选项:
定义网络结构体后,指定训练选项。使用具有动量的随机梯度下降(SGDM) 训练网络,初始学习率为 0.01。将最大训练轮数设置为4。一轮训练是对整个训练数据集的一个完整训练周期。通过指定验证数据和验证频率,监控训练过程中的网络准确度。每轮训练都会打乱数据(划重点)。软件基于训练数据训练网络,并在训练过程中按固定时间间隔(指'ValidationFrequency',30)计算基于验证数据的准确度(本例是分类,所以是Accuracy,若是回归,则应该为均方根误差 RMSE)。验证数据不用于更新网络权重。打开训练进度图,关闭命令行窗口输出。
分析:本例中,最大epoch=4,每个epoch中,梯度和网络参数更新/迭代了58次(即iteration =58),每次迭代使用了128个样本。 58X128 =7500(样本为7500), 4次利用7500个样本,所以训练该网络总共迭代了 58x4=232次。
训练进度图显示了小批量损失和准确度以及验证损失(loss)和准确度(分类是accuracy,回归是RMSE)。有关训练进度图的详细信息,请参阅:监控深度学习训练进度- MATLAB & Simulink- MathWorks 中国。本例的loss是交叉熵损失。准确度是网络分类正确的图像的百分比。训练进度如下图所示。
net = trainNetwork(imdsTrain,layers,options);
准确度是网络预测正确的标签的比例。在本例中,超过 99% 的预测标签与验证集的真实标签相匹配。
可在最后验证验证图像进行分类并计算准确度。
accuracy = 0.9912