火车卷积神经网络回归
这个例子展示了如何使用卷积神经网络适合回归模型预测手写数字的旋转角度。
卷积神经网络(cnn或回旋网)是必不可少的工具,深入学习,并且尤其适合于分析图像数据。例如,您可以使用cnn对图片进行分类。预测连续数据,如角度和距离,可以包括一个回归层的网络。
构造一个卷积神经网络架构的例子中,列车网络,并使用训练网络预测角度旋转手写数字。这些预测是有用的光学字符识别。
可选地,您可以使用imrotate
(图像处理工具箱™)旋转图像箱线图
(统计和机器学习的工具箱™)创建一个剩余箱线图。
加载数据
数据集包含合成图像的手写的数字与相应的角度(度)的每个图像旋转。
负荷训练和验证图像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(我)))结束
检查数据归一化
当训练神经网络,它经常帮助确保你的数据归一化在所有阶段的网络。标准化有助于稳定和加快网络训练使用梯度下降法。如果您的数据是很差了,那么可以成为损失南
在培训和网络参数可以发散。规范数据的常见方法包括尺度改变数据,以便其范围是[0,1]或者它有一个零均值和标准偏差。可以正常以下数据:
输入数据。正常化之前预测输入他们的网络。在本例中,输入图像已经规范化区间[0,1]。
层输出。你可以正常的输出卷积和完全连接层使用一批标准化层。
响应。如果你使用批量标准化规范化层输出层最后的网络,那么网络的预测是规范化培训开始时。如果响应有一个非常不同的规模从这些预测,网络训练可以无法收敛。如果你的反应是差了,那么尝试正常化,看看网络培训提高。如果你正常响应在训练之前,你必须改变训练网络的预测来获取原始响应的预测。
响应的分布。响应(度)的旋转角大约是均匀分布在-45年和45岁,工作不需要规范化。在分类问题中,输出类概率,它总是规范化。
图直方图(YTrain)轴紧ylabel (“计数”)包含(旋转角度的)
一般来说,不需要完全规范化的数据。然而,如果你训练网络在这个例子来预测100 * YTrain
或YTrain + 500
而不是YTrain
,那么损失就越大南
训练开始时和网络参数偏离。这些结果发生,尽管网络预测的唯一区别aY + b和一个网络预测Y是一个简单的尺度改变最终的重量和偏见完全连接层。
如果输入或响应的分布非常不均匀或倾斜,您还可以执行非线性转换(例如,取对数)之前的数据训练网络。
创建网络层
为了解决回归问题,创建网络的层和包括一个回归层的网络。
第一层定义了输入数据的大小和类型。输入图像28-by-28-by-1。创建一个图像相同大小的输入层的训练图像。
网络的中间层定义网络的核心架构,在大部分的计算和学习。
最后一层定义输出数据的大小和类型。对于回归问题,一个完全连接层必须先于回归层的网络。创建一个完全连接输出层大小1和回归层。
结合在一起的所有层层
数组中。
层= [imageInputLayer ([28 28 1]) convolution2dLayer (3 8“填充”,“相同”)batchNormalizationLayer reluLayer averagePooling2dLayer (2“步”2)convolution2dLayer(16日“填充”,“相同”)batchNormalizationLayer reluLayer averagePooling2dLayer (2“步”32岁的,2)convolution2dLayer (3“填充”,“相同”32岁的)batchNormalizationLayer reluLayer convolution2dLayer (3“填充”,“相同”)batchNormalizationLayer reluLayer dropoutLayer (0.2) fullyConnectedLayer (1) regressionLayer];
列车网络的
创建网络培训选项。火车30时代。设置初始学习速率低0.001和20世纪后的学习速率。监控网络在训练精度通过指定验证数据和验证的频率。训练数据训练网络的软件和计算精度验证数据期间定期培训。验证数据不是用于更新网络权重。打开培训进展情节,关闭命令窗口的输出。
miniBatchSize = 128;validationFrequency =地板(元素个数(YTrain) / miniBatchSize);选择= trainingOptions (“个”,…“MiniBatchSize”miniBatchSize,…“MaxEpochs”30岁的…“InitialLearnRate”1 e - 3,…“LearnRateSchedule”,“分段”,…“LearnRateDropFactor”,0.1,…“LearnRateDropPeriod”,20岁,…“洗牌”,“every-epoch”,…“ValidationData”{XValidation, YValidation},…“ValidationFrequency”validationFrequency,…“阴谋”,“训练进步”,…“详细”、假);
创建网络使用trainNetwork
。这个命令使用GPU如果可用兼容。使用GPU需要并行计算工具箱™和支持GPU设备。金宝app支持设备的信息,请参阅金宝appGPU的金宝app支持版本(并行计算工具箱)。否则,trainNetwork
使用CPU。
网= trainNetwork (XTrain、YTrain层,选择);
检查中包含的网络体系结构的细节层
的属性净
。
net.Layers
ans = 18 x1层阵列层:1“imageinput”28 x28x1图像输入图像与“zerocenter”正常化2 conv_1的卷积8 3 x3x1旋转步[1]和填充“相同”3“batchnorm_1”批量标准化批量标准化8通道4的relu_1 ReLU ReLU 5“avgpool2d_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“avgpool2d_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 conv_4的卷积32 3 x3x32旋转步[1]和填充“相同”14“batchnorm_4”批量标准化批量标准化32通道15 ' relu_4 ReLU ReLU 16“辍学”辍学辍学17 20% fc的完全连接1完全连接层18“regressionoutput”回归的输出均方误差响应“响应”
测试网络
测试网络的性能评估验证数据的准确性。
使用预测
预测验证图像的旋转角度。
YPredicted =预测(净,XValidation);
评估性能
评估模型的性能通过计算:
一个可接受的误差范围内预测的百分比
均方根误差(RMSE)的预测和实际角度旋转
计算预测误差之间的预测和实际角度旋转。
predictionError = YValidation - YPredicted;
计算预测的数量从真实的角度可接受的误差范围内。设置阈值是10度。计算预测在这个阈值的百分比。
用力推= 10;numCorrect = (abs (predictionError)和<刺);numValidationImages =元素个数(YValidation);= numCorrect / numValidationImages准确性
精度= 0.9672
使用均方根误差(RMSE)测量预测之间的差异和实际的旋转角度。
广场= predictionError。^ 2;rmse =√意味着(广场))
rmse =单4.6507
可视化预测
在散点图上可视化预测。预测值与真实值。
图散射(YPredicted YValidation,“+”)包含(“预测价值”)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,“双三次的”,“作物”);结束
显示原始数字纠正旋转。您可以使用蒙太奇
(图像处理工具箱)显示位数一起在一个单一的形象。
图次要情节(1、2、1)蒙太奇(XValidation (:,:,:, idx))标题(“原始”次要情节(1、2、2)蒙太奇(imagesRotated)标题(“纠正”)
另请参阅
regressionLayer
|classificationLayer