主要内容

火车回归卷积神经网络

这个例子展示了如何使用卷积神经网络拟合一个回归模型来预测手写体数字的旋转角度。

卷积神经网络(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)进行执行。

创建网络层

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

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

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

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

将所有层组合在一起数组中。

图层= [imageInputlayer([28 28 1])卷积2dlayer(3,8,“填充”'相同的') batchNormalizationLayer relullayer平均epooling2dlayer (2,'走吧',2)卷积2dlayer(3,16,“填充”'相同的') batchNormalizationLayer relullayer平均epooling2dlayer (2,'走吧'32岁的,2)convolution2dLayer (3“填充”'相同的')BatchnormalizationLayer Ruilulayer卷积2dlayer(3,32,“填充”'相同的') batchNormalizationLayer reluLayer dropoutLayer(0.2) fullconnectedlayer (1) regressionLayer];

火车网络

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

minibatchsize = 128;验证频率=地板(Numel(YTrain)/小型匹配);选项=培训选项(“个”......'minibatchsize'miniBatchSize,......'maxepochs',30,......“InitialLearnRate”,1e-3,......“LearnRateSchedule”'分段'......“LearnRateDropFactor”,0.1,......'学习ropperiod'20,......“洗牌”'每个时代'......'vightationdata',{xvalidation,yvalidation},......'验证职业'validationFrequency,......'plots''培训 - 进步'......“详细”,错误的);

使用创建网络trainNetwork。如果可用,则此命令使用兼容的GPU。使用GPU需要并行计算工具箱™和支持的GPU设备。金宝app有关支持设备的信息,请参阅金宝appGPU支金宝app持版本(并行计算工具箱)。除此以外,trainNetwork使用CPU。

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

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

net.layers.
ans = 18×1带有图层的图层数组:1“imageinput”图像输入28××28日1图像“zerocenter”正常化2 conv_1的卷积8 3×3×1的隆起与步幅[1]和填充“相同”3“batchnorm_1”批量标准化批量标准化8通道4的relu_1 ReLU ReLU 5‘avgpool2d_1平均池2×2平均池步(2 - 2)和填充[0 0 0 0]6“conv_2”Convolution 16 3×3×8 convolutions with stride [1 1] and padding 'same' 7 'batchnorm_2' Batch Normalization Batch normalization with 16 channels 8 'relu_2' ReLU ReLU 9 'avgpool2d_2' Average Pooling 2×2 average pooling with stride [2 2] and padding [0 0 0 0] 10 'conv_3' Convolution 32 3×3×16 convolutions with stride [1 1] and padding 'same' 11 'batchnorm_3' Batch Normalization Batch normalization with 32 channels 12 'relu_3' ReLU ReLU 13 'conv_4' Convolution 32 3×3×32 convolutions with stride [1 1] and padding 'same' 14 'batchnorm_4' Batch Normalization Batch normalization with 32 channels 15 'relu_4' ReLU ReLU 16 'dropout' Dropout 20% dropout 17 'fc' Fully Connected 1 fully connected layer 18 'regressionoutput' Regression Output mean-squared-error with response 'Response'

测试网络

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

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

ypreedicte =预测(net,xvalidation);

评估性能

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

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

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

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

predictionError = YValidation - YPredicted;

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

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

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

广场= predictionError。^ 2;rmse =√意味着(广场))
RMSE =.单身的4.6062

可视化预测

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

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

正确的数字旋转

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

idx = randperm(numvalidationImages,49);为了i = 1:元素个数(idx)图像= XValidation (:,:,:, idx(我));predictedAngle = YPredicted (idx (i));imagesRotated (::,:, i) = imrotate(形象,predictedAngle,'bicubic''庄稼');结束

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

figure subplot(1,2,1)蒙太奇(XValidation(:,:,:,idx))'原来的'副图(1,2,2)蒙太奇(图像旋转)标题'纠正'

也可以看看

|

相关话题