主要内容

火车回归卷积神经网络

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

卷积神经网络(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 reluLayer averagePooling2dLayer(2,'走吧',2)卷积2dlayer(3,16,'填充''相同的')batchNormalizationLayer reluLayer averagePooling2dLayer(2,'走吧',2)卷积2dlayer(3,32,'填充''相同的')BatchnormalizationLayer Ruilulayer卷积2dlayer(3,32,'填充''相同的')batchNormalizationLayer reluLayer dropoutLayer(0.2)fullyConnectedLayer(1)regressionLayer];

火车网络

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

minibatchsize = 128;验证频率=地板(Numel(YTrain)/小型匹配);选项=培训选项('SGDM'......'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 1]和填充 '相同'3 'batchnorm_1' 批量标准化批正常化8个通道4 'relu_1' RELU RELU 5 'avgpool2d_1' 平均池2×2平均池与步幅[2 2]和填充[0 0 0 0] 6 'conv_2' 卷积16 3×3×8的卷积与步幅[1 1]和填充 '相同' 7 'batchnorm_2' 批量标准化批正常化与16个信道8 'relu_2' RELU RELU 9 'avgpool2d_2' 平均池2×2平均池与步幅[2 2]和填充[0 0 0 0] 10 'conv_3' 卷积32分3×3×16的卷积与步幅[11]和填充 '相同' 11 'batchnorm_3' 批量标准化批正常化与32个通道12 'relu_3' RELU RELU 13“conv_4'卷积32 3×3×32的卷积步幅[1 1]和填充 '相同' 14 'batchnorm_4' 批量标准化批正常化与32个通道15 'relu_4' RELUřELU 16“差”降20%滤除17“FC”完全连接1完全连接层18“regressionoutput”回归输出均方误差与响应“响应”

测试网络

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

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

ypreedicte =预测(net,xvalidation);

评估性能

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

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

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

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

predictionError = YValidation  -  YPredicted;

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

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

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

。方形= predictionError ^ 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));predictedAngle = YPredicted(IDX(I));imagesRotated(:,:,:,1)= imrotate(图像,predictedAngle,'bicubic''庄稼');结尾

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

图副区(1,2,1)的蒙太奇(XValidation(:,:,:,IDX))标题('原来的')副区(1,2,2)蒙太奇(imagesRotated)标题('纠正'

也可以看看

|

相关话题