主要内容

火车回归卷积神经网络

该示例显示如何使用卷积神经网络来满足回归模型,以预测手写数字的旋转角度。

卷积神经网络(CNNS或COMMNET)是深度学习的重要工具,特别适用于分析图像数据。例如,您可以使用CNN来对图像进行分类。为了预测连续数据,例如角度和距离,可以在网络末尾中包含回归层。

该示例构造卷积神经网络架构,培训网络,并使用训练网络预测旋转手写数字的角度。这些预测可用于光学字符识别。

可选地,您可以使用imrotate.(图像处理工具箱™)旋转图像,以及箱形图(统计和机器学习工具箱™)以创建残留盒绘图。

加载数据

数据集包含手写数字的合成图像以及与每个图像旋转的相应角度(以度为单位)一起。

将训练和验证图像加载为4-D阵列digittrain4darraydata.digittest4darraydata.。产出ytrain.yvalidation.旋转角度是度的。训练和验证数据集每个包含5000个图像。

[XTrain,〜,Ytrain] = Digittrain4darraydata;[xvalidation,〜,yvalidation] = dimittest4darraydata;

显示20个随机训练图像imshow.

numtrainimages = numel(ytrain);图idx = randperm(numtrainimages,20);为了i = 1:numel(idx)子图(4,5,i)imshow(xtrain(:,:,:,idx(i)))结尾

检查数据归一化

培训神经网络时,它通常有助于确保您的数据在网络的所有阶段中归一化。标准化有助于使用梯度下降稳定和加速网络培训。如果您的数据缩放不佳,则损失可能会变成并且网络参数在训练期间可以发散。标准化数据的常见方式包括重新划分数据,使其范围变为[0,1],或者它具有零和标准偏差的范围。您可以确定以下数据:

  • 输入数据。在将预测器输入到网络之前,标准化预测器。在该示例中,输入图像已归一化为范围[0,1]。

  • 层输出。您可以使用批量归一化层来规范每个卷积和完全连接层的输出。

  • 回复。如果使用批量归一化层以归一化网络末尾的图层输出,那么在训练开始时,网络的预测是归一化的。如果响应具有从这些预测的比例非常不同,则网络培训可能无法收敛。如果您的响应缩放不佳,则尝试归一化它,并查看网络培训是否有所提高。如果在培训之前正常化响应,则必须将培训的网络的预测转换为获取原始响应的预测。

绘制响应的分布。响应(旋转角度)近似均匀地分布在-45和45之间,这在不需要归一化的情况下运行良好。在分类问题中,输出是类概率,总是归一化。

图直方图(YTrain)轴紧的ylabel('算作')Xlabel('旋转角度'

通常,数据不必完全归一化。但是,如果您在此示例中培训网络以预测100 * ytrain或者YTrain + 500.代替ytrain.然后丢失变成了培训开始时,网络参数分歧。即使网络预测之间的唯一区别,也会出现这些结果AY + B.和网络预测y简单地重新求解最终完全连接层的重量和偏差。

如果输入或响应的分布非常不均匀或倾斜,则在培训网络之前,您还可以对数据执行非线性转换(例如,将Logarithms)进行执行。

创建网络层

为了解决回归问题,创建网络的层,并在网络的末尾包括回归层。

第一层定义输入数据的大小和类型。输入图像是28-×28-1。创建与训练图像相同大小的图像输入层。

网络的中间层定义了网络的核心架构,其中大部分计算和学习发生。

最终层定义输出数据的大小和类型。对于回归问题,完全连接的层必须在网络末尾的回归层之前。创建一个完全连接的大小1和回归层的输出层。

将所有层组合在一起大批。

图层= [imageInputlayer([28 28 1])卷积2dlayer(3,8,'填充''相同的')BatchnormalizationLayer Rublayer普通泡泡液(2,'走吧',2)卷积2dlayer(3,16,'填充''相同的')BatchnormalizationLayer Rublayer普通泡泡液(2,'走吧',2)卷积2dlayer(3,32,'填充''相同的')BatchnormalizationLayer Ruilulayer卷积2dlayer(3,32,'填充''相同的')BatchnormalizationLayer Rufulayer Dropoutrayer(0.2)全连接层(1)回归层];

火车网络

创建网络培训选项。火车30时代。将初始学习率设置为0.001并在20时以后降低学习率。通过指定验证数据和验证频率在培训期间监控网络精度。该软件在培训数据上培训网络,并在培训期间定期计算验证数据的准确性。验证数据不用于更新网络权重。打开训练进度绘图,然后关闭命令窗口输出。

minibatchsize = 128;验证频率=地板(Numel(YTrain)/小型匹配);选项=培训选项('sgdm'......'minibatchsize',小匹马,......'maxepochs',30,......'italllearnrate',1e-3,......'shownrateschedule''分段'......'学习ropfactor',0.1,......'学习ropperiod'20,......'洗牌''每个时代'......'vightationdata',{xvalidation,yvalidation},......'验证职业',验证职权,......'plots''培训 - 进步'......'verbose',错误的);

使用创建网络Trainnetwork.。如果可用,则此命令使用兼容的GPU。使用GPU需要并行计算工具箱™和支持的GPU设备。万博1manbetx有关支持设备的信息,请参阅万博1manbetxGPU通万博1manbetx过发布支持(并行计算工具箱)。除此以外,Trainnetwork.使用CPU。

net = trainnetwork(xtrain,ytrain,图层,选项);

检查包含在内的网络架构的详细信息层数财产

Net.Layers.
ANS = 18×1层阵列,层数:1'ImageInput'图像输入28×28×1图像与“Zerocenter”归一化2'CONC_1'卷积8 3×3×1卷绕卷曲[1 1]并填充'同样'3'Batchnorm_1'批量归一化批量归一化用8个通道4'Relu_1'Relu Relu 5'AvgPool2D_1'平均池2×2平均汇集步进[2 2]和填充[0 0 0 0] 6'CONC_2'卷积16 3×3×8卷绕升序[11]和填充'相同'7'Batchnorm_2'批量归一化批量归一化与16个通道8'Relu_2'Relu Relu 9'AvgPool2D_2'平均池2×2平均汇集步进[2]和填充[0 0 0 0] 10'CROM_3'卷积32 3×3×16卷绕升温[11]和填充'相同的'11'BATCHNOMM_3'批量归一化批量归一批与32个通道12'Relu_3'Relu Relu 13'Conv_4'卷积32 3×3×32卷曲的卷发[1 1]和填充'相同的'14'Batchnorm_4'批量归一化批量标准化,32通道15'Relu_4'Relu RELU 16'丢弃'辍学20%丢失17'FC'完全连接的1完全连接的层18'回归输出输出均值均匀误差响应'响应'

测试网络

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

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

ypreedicte =预测(net,xvalidation);

评估性能

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

  1. 可接受的错误边距内的预测百分比

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

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

predictionerror = yvalidation  -  Y预期;

从真实角度计算可接受的误差余量内的预测数量。将阈值设置为10度。计算此阈值内的预测百分比。

thr = 10;numcorrect = sum(abs(predictionError)
              
精度= 0.9690.

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

正方形=预测值。^ 2;RMSE = SQRT(平均值(正方形))
RMSE =.单身的4.6062

可视化预测

可视化散点图中的预测。绘制预测值违反真实值。

图分散(Y预期,YValidation,'+')Xlabel(“预测值”)ylabel(“真实价值”) 抓住图([ -  60 60],[-60 60],'r--'

正确的数字旋转

您可以使用来自图像处理工具箱的功能,以使数字拉直并将其显示在一起。根据其预测的旋转角度旋转49个采样数字imrotate.(图像处理工具箱)。

idx = randperm(numvalidationimages,49);为了i = 1:numel(idx)图像= xvalidation(:,:,:,idx(i));predictentangle = ypreedicted(idx(i));iconiageRotated(::,:,i)= imrootate(图像,predictentangle,'bicubic''庄稼');结尾

显示其校正旋转的原始数字。您可以使用剪辑(图像处理工具箱)以在单个图像中显示数字。

图形子图(1,2,1)蒙太奇(xvalidation(:,:,:,idx))标题('原来的')子图(1,2,2)蒙太奇(Imagesotated)标题('纠正'

也可以看看

|

相关话题