火车卷积神经网络的回归

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

卷积神经网络(细胞神经网络,或ConvNets)是深度学习的重要工具,并特别适合于分析图像数据。例如,你可以用细胞神经网络分类图像。为了预测连续的数据,如角度和距离,可以包括在网络的端部的回归层。

的示例构造的卷积神经网络结构,火车的网络中,并使用经训练的网络来预测的旋转手写体数字的角度。这些预测是光学字符识别有用的。

或者,您可以使用imrotate(图像处理工具箱™),旋转图像,并且箱形图(统计和机器学习工具箱™)创建剩余箱线图。

数据加载

该数据集包含的手写体数字合成影像与由每个图像被旋转相应的角度(以度为单位)连接在一起。

作为4 d阵列使用加载训练和验证的图像digitTrain4DArrayDatadigitTest4DArrayData。输出YTrainYValidation在度的旋转角度。训练和验证数据集都包含5000张图片。

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

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

numTrainImages = numel(YTrain);图IDX = randperm(numTrainImages,20);对于I = 1:numel(IDX)副区(4,5,i)的imshow(XTrain(:,:,:,IDX(I)))的DrawNow结束

检查数据标准化

当训练神经网络,它常常有助于确保您的数据在网络中的各个阶段标准化。标准化有助于稳定和加快采用梯度下降网络训练。如果您的数据缩放不好,那么损失会变得为NaN和网络参数可以在训练中发散。正火数据的常用方法包括:重新缩放数据使得其范围变得[0,1]或使得它具有平均的零和一的标准偏差。您可以正常化以下数据:

  • 输入数据。你正常化前的预测输入它们连接到网络。在这个例子中,输入图像已经被归一化到范围[0,1]。

  • 层的输出。可以通过使用批处理正常化层正常化每个卷积和完全连接层的输出。

  • 响应。如果使用批标准化层在网络的端部来归一化层的输出,则网络的预测训练开始时被归一化。如果响应具有从这些预测的规模差别很大,那么网络训练可能无法收敛。如果你的反应是按比例甚少,然后尝试正常化一下,看看是否网络培训提高。如果您正常化训练前的反应,那么你必须转变训练网络的预测,以获得原始响应的预测。

绘制响应的分布。响应(以度为单位旋转角)大致均匀地-45和45,其无需正常化效果很好之间分配。在分类问题,输出级的概率,这是永远归。

图直方图(YTrain)轴ylabel(“计数”)xlabel(“转角”

在一般情况下,数据没有被准确地正常化。但是,如果你在这个例子中训练网络预测100 * YTrain要么YTrain + 500代替YTrain,那么造成的损失变得为NaN和网络参数训练开始时发散。即使网络之间的唯一区别预测这些结果发生一条Y + B和网络预测ÿ是一个简单的重新缩放权重和最终完全连接层的偏见。

如果输入或响应的分布很不均匀或倾斜,也可以执行非线性变换(例如,取对数)训练网络之前,该数据。

创建网络层

为了解决回归问题,创建网络的层和包括在网络的端部的回归层。

所述第一层限定了输入数据的大小和类型。输入图像28按28×1。创建相同的大小作为训练图像的图像输入层。

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

最终层限定的尺寸和输出数据的类型。对于回归问题,一个完全连接层必须在网络的端部先于回归层。创建尺寸1的完全连接输出层和回归层。

合并所有图层一起在一个阵列。

层= [imageInputLayer([28 28 1])convolution2dLayer(3,8,'填充''相同')batchNormalizationLayer reluLayer averagePooling2dLayer(2,“跨越论”,2)convolution2dLayer(3,16,'填充''相同')batchNormalizationLayer reluLayer averagePooling2dLayer(2,“跨越论”,2)convolution2dLayer(3,32,'填充''相同')batchNormalizationLayer reluLayer convolution2dLayer(3,32,'填充''相同')batchNormalizationLayer reluLayer dropoutLayer(0.2)fullyConnectedLayer(1)regressionLayer];

列车网络

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

miniBatchSize = 128;validationFrequency =地板(numel(YTrain)/ miniBatchSize);选项= trainingOptions('SGDM'...'MiniBatchSize',miniBatchSize,...'MaxEpochs'30,...'InitialLearnRate',1E-3,...'LearnRateSchedule'“分段”...'LearnRateDropFactor',0.1%,...'LearnRateDropPeriod'20,...“洗牌”“每个历元”...'ValidationData'{XValidation,YValidation}...'ValidationFrequency',validationFrequency,...“情节”“训练进度”...“放牧”,假);

创建使用网络trainNetwork。如果有此命令使用兼容的GPU。除此以外,trainNetwork使用CPU。一个启用CUDA®GPUNVIDIA®计算能力3.0或更高版本需要在GPU上训练。

净= trainNetwork(XTrain,YTrain,层,选项);

检查包含在网络架构的细节图层财产

net.Layers
ANS = 18×1层阵列层:1“imageinput”图像输入28x28x1图像与“zerocenter”正常化2“conv_1”卷积8个3x3x1卷积步幅[1 1]和填充“相同” 3“batchnorm_1”批量标准化批8正常化通道4 'relu_1' RELU RELU 5 'avgpool2d_1' 平均池2x2的平均池与步幅[2 2]和填充[0 0 0 0] 6 'conv_2' 卷积16个3x3x8卷积步幅[1 1]和填充 '相同' 7'batchnorm_2' 批量标准化批正常化与16个信道8 'relu_2' RELU RELU 9 'avgpool2d_2' 平均池2x2的平均池与步幅[2 2]和填充[0 0 0 0] 10 'conv_3' 卷积32个3x3x16卷积与步幅[1 1]和填充 '相同' 11 'batchnorm_3' 批量标准化批正常化与32个通道12 'relu_3' RELU RELU 13 'conv_4' 卷积32个3x3x32卷积步幅[1 1]和填充 '相同' 14 'batchnorm_4' 批量标准化批标准化与32个通道15“relu_4” RELUřELU 16“差”降20%滤除17“FC”完全连接1完全连接层18“regressionoutput”回归输出均方误差与响应“响应”

测试网络

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

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

YPredicted =预测(净,XValidation);

绩效评估

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

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

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

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

predictionError = YValidation  -  YPredicted;

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

THR = 10;numCorrect =总和(ABS(predictionError)
              
精度= 0.9704

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

。方形= predictionError ^ 2;RMSE = SQRT(平均值(正方形))
RMSE =4.6056

显示残差的箱线图每个数字类

箱形图函数需要其中每列对应于残差每个数字类的矩阵。

验证数据组图像由数字0-9的类与每个500倍的例子。采用重塑到组残差由数字类。

residualMatrix =重塑(predictionError,500,10);

的每一列residualMatrix对应于每个位的残差。创建使用每个数字的剩余箱线图箱形图(统计和机器学习工具箱)。

图箱线图(residualMatrix,...'标签'{'0''1''2''3''4''5''6''7''8''9'})xlabel(“数字类”)ylabel(“程度的误差”)标题(“残差”

数字类与精度最高的平均接近零,而且很少变化。

正确的数字轮作

您可以使用函数从图像处理工具箱整顿数字一起显示出来。根据使用旋转它们的预测的角度旋转49个样品数字imrotate(图像处理工具箱)。

IDX = randperm(numValidationImages,49);对于I = 1:numel(IDX)图像= XValidation(:,:,:,IDX(I));predictedAngle = YPredicted(IDX(I));imagesRotated(:,:,:,1)= imrotate(图像,predictedAngle,“双立方”'作物');结束

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

图副区(1,2,1)的蒙太奇(XValidation(:,:,:,IDX))标题('原版的')副区(1,2,2)蒙太奇(imagesRotated)标题(“修正”

也可以看看

|

相关话题