主要内容

分类网络转化为回归网络

这个例子展示了如何训练分类网络转换成一个回归网络。

Pretrained图像分类网络一直在训练图像和可以分类图像到1000年超过一百万对象类别,如键盘、咖啡杯、铅笔,和许多动物。网络学到丰富的特性表现为广泛的图像。网络需要一个图像作为输入,然后输出图像中对象的标签一起为每个对象的类别的概率。

在深度学习应用程序转移学习是常用的。pretrained网络,可以使用它作为一个起点,学习一个新任务。这个例子展示了如何pretrained分类网络,它接受回归任务。

示例加载pretrained卷积神经网络分类架构,取代了层分类和通过网络来预测角度旋转的手写数字。可选地,您可以使用imrotate(图像处理工具箱™)正确使用预测值图像旋转。

负载Pretrained网络

加载pretrained网络的支持文件金宝appdigitsNet.mat。这个文件包含一个分类网络分类手写数字。

负载digitsNet层= net.Layers
层x1 = 15层阵列层:1“imageinput”图像输入28 x28x1图片2”zerocenter“正常化”conv_1二维卷积8 3 x3x1旋转步[1]和填充“相同”3“batchnorm_1”批量标准化批量标准化8通道4的relu_1 ReLU ReLU 5“maxpool_1”二维最大池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]6“conv_2”二维卷积16 3 x3x8旋转步[1]和填充“相同”7”batchnorm_2批量标准化批量标准化与16通道8 ' relu_2 ReLU ReLU 9“maxpool_2”二维最大池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]10“conv_3”二维卷积32 3 x3x16旋转步[1]和填充“相同”11的batchnorm_3批量标准化批量标准化32通道12“relu_3”ReLU ReLU 13 fc的完全连接10完全连接层14的softmax softmax softmax 15“classoutput”分类输出crossentropyex与其他“0”和9类

加载数据

数据集包含合成图像的手写的数字与相应的角度(度)的每个图像旋转。

负荷训练和验证图像4 - d阵列使用digitTrain4DArrayDatadigitTest4DArrayData。输出YTrainYValidation在度的旋转角度。培训和验证数据集每一个包含5000张图片。

[XTrain ~, YTrain] = digitTrain4DArrayData;[XValidation ~, YValidation] = digitTest4DArrayData;

使用显示20个随机训练图像imshow

numTrainImages =元素个数(YTrain);图idx = randperm (numTrainImages 20);i = 1:元素个数(idx)次要情节(4、5、i) imshow (XTrain (:,:,:, idx(我)))结束

图包含20个坐标轴对象。坐标轴对象1包含一个类型的对象的形象。坐标轴对象2包含一个类型的对象的形象。坐标轴对象3包含一个类型的对象的形象。坐标轴对象4包含一个类型的对象的形象。5轴对象包含一个类型的对象的形象。6轴对象包含一个类型的对象的形象。7轴对象包含一个类型的对象的形象。8轴对象包含一个类型的对象的形象。坐标轴对象9包含一个类型的对象的形象。 Axes object 10 contains an object of type image. Axes object 11 contains an object of type image. Axes object 12 contains an object of type image. Axes object 13 contains an object of type image. Axes object 14 contains an object of type image. Axes object 15 contains an object of type image. Axes object 16 contains an object of type image. Axes object 17 contains an object of type image. Axes object 18 contains an object of type image. Axes object 19 contains an object of type image. Axes object 20 contains an object of type image.

取代最后一层

网络的卷积层提取图像特征,最后可学的一层一层和最后的分类使用对输入图像进行分类。这两个层,“俱乐部”“classoutput”digitsNet,包含的信息如何结合网络特性,提取类概率,损失价值,预测标签。再培训pretrained网络回归,这两层替换为新图层适应任务。

取代最后完全连接层,将softmax层和输出层分类完全连接层的大小是1(响应)的数量和回归层。

numResponses = 1;层=[层(1:12)fullyConnectedLayer (numResponses) regressionLayer];

冻结初始层

网络现在已经准备好被新数据重新训练。可选地,您可以“冻结”早些时候层网络的权重通过设置在这些层学习率为零。在培训期间,trainNetwork不会更新冻层的参数。因为冰冻的梯度层不需要计算,冻结许多初始层的权重可以显著加快网络训练。如果新数据集很小,然后冻结之前网络层可以防止这些层过度拟合到新的数据集。

使用支持函数金宝appfreezeWeights设置学习利率为零的12层。

层(1:12)= freezeWeights(层(1:12));

列车网络的

创建网络培训选项。设置初始学习率0.001。监控网络在训练通过指定验证数据准确性。打开培训进展情节,关闭命令窗口的输出。

选择= trainingOptions (“个”,“InitialLearnRate”,0.001,“ValidationData”{XValidation, YValidation},“阴谋”,“训练进步”,“详细”、假);

创建网络使用trainNetwork。这个命令使用GPU如果可用兼容。使用GPU需要并行计算工具箱™和支持GPU设备。金宝app支持设备的信息,请参阅金宝appGPU计算的需求(并行计算工具箱)。否则,trainNetwork使用CPU。

网= trainNetwork (XTrain、YTrain层,选择);

图培训进展(03 - mar - 2023 09:07:15)包含2轴uigridlayout类型的对象和另一个对象。轴与包含迭代对象1,ylabel损失包含10块类型的对象,文本行。轴与包含迭代对象2,ylabel RMSE包含10块类型的对象,文本行。

测试网络

测试网络的性能评估验证数据的准确性。

使用预测预测验证图像的旋转角度。

YPred =预测(净,XValidation);

评估模型的性能通过计算:

  1. 一个可接受的误差范围内预测的百分比

  2. 均方根误差(RMSE)的预测和实际角度旋转

计算预测误差之间的预测和实际角度旋转。

predictionError = YValidation - YPred;

计算预测的数量从真实的角度可接受的误差范围内。设置阈值是10度。计算预测在这个阈值的百分比。

用力推= 10;numCorrect = (abs (predictionError)和<刺);numImagesValidation =元素个数(YValidation);= numCorrect / numImagesValidation准确性
精度= 0.7532

使用均方根误差(RMSE)测量预测之间的差异和实际的旋转角度。

rmse =√意味着(predictionError ^ 2))
rmse =9.0270

正确的数字旋转

您可以使用函数从数字图像处理工具箱整理和显示在一起。旋转49样本位数根据他们的预测使用旋转角度imrotate(图像处理工具箱)。

idx = randperm (numImagesValidation, 49);i = 1:元素个数(idx)我= XValidation (:,:,:, idx(我));Y = YPred (idx (i));XValidationCorrected (::,:, i) = imrotate (Y,我“双三次的”,“作物”);结束

显示原始数字纠正旋转。使用蒙太奇(图像处理工具箱)显示位数一起在一个单一的形象。

图次要情节(1、2、1)蒙太奇(XValidation (:,:,:, idx))标题(“原始”次要情节(1、2、2)蒙太奇(XValidationCorrected)标题(“纠正”)

图包含2轴对象。坐标轴对象1与原有标题包含一个类型的对象的形象。坐标轴对象2标题纠正包含一个类型的对象的形象。

另请参阅

|

相关的话题