分类网络转化为回归网络
这个例子展示了如何训练分类网络转换成一个回归网络。
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阵列使用digitTrain4DArrayData
和digitTest4DArrayData
。输出YTrain
和YValidation
在度的旋转角度。培训和验证数据集每一个包含5000张图片。
[XTrain ~, YTrain] = digitTrain4DArrayData;[XValidation ~, YValidation] = digitTest4DArrayData;
使用显示20个随机训练图像imshow
。
numTrainImages =元素个数(YTrain);图idx = randperm (numTrainImages 20);为i = 1:元素个数(idx)次要情节(4、5、i) imshow (XTrain (:,:,:, idx(我)))结束
取代最后一层
网络的卷积层提取图像特征,最后可学的一层一层和最后的分类使用对输入图像进行分类。这两个层,“俱乐部”
和“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层,选择);
测试网络
测试网络的性能评估验证数据的准确性。
使用预测
预测验证图像的旋转角度。
YPred =预测(净,XValidation);
评估模型的性能通过计算:
一个可接受的误差范围内预测的百分比
均方根误差(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)标题(“纠正”)
另请参阅
regressionLayer
|classificationLayer