主要内容

用深网络设计师转移学习

此示例显示如何使用深网络设计器应用交互地执行传输学习。

转移学习是采取预训练的深度学习网络和微调它来学习新任务的过程。使用转移学习通常比从头开始训练网络更快更容易。您可以使用较少量的数据快速将学习功能转移到新任务。

使用深度网络设计器通过以下步骤执行图像分类的传输学习:

  1. 打开Deep Network Designer应用程序,选择一个预先训练的网络。

  2. 导入新的数据集。

  3. 用适用于新数据集的新图层替换最终图层。

  4. 设定学习率,以便在新图层中学习比转移层更快。

  5. 使用深层网络设计器培训网络,或在命令行导出网络进行培训。

提取数据

在工作区中,提取MathWorks Merch数据集。这是一个小型数据集,其中包含75张Mathworks商品图像,属于五个不同的类(多维数据集打牌螺丝刀,火炬)。

解压缩(“MerchData.zip”);

选择预训练网络

打开深网设计器,就可以了应用标签,下面机器学习和深度学习,单击应用程序图标。或者,你可以从命令行打开应用程序:

deepNetworkDesigner

深度网络设计器提供了预先训练的图像分类网络的选择,这些网络学习了丰富的特征表示,适合于广泛的图像。如果您的图像与最初用于训练网络的图像相似,迁移学习效果最好。如果您的训练图像是像ImageNet数据库中那样的自然图像,那么任何预先训练的网络都是合适的。有关可用网络的列表以及如何比较它们,请参见预先训练的深度神经网络

如果您的数据与ImageNet数据非常不同(例如,如果您有微小的图像、光谱图或非图像数据),那么训练一个新的网络可能会更好。有关如何从头开始训练网络的示例,请参见使用深网络设计器创建简单的序列分类网络在深网络设计师中列车简单的语义分段网络

SqueezeNet不需要额外的支持包。金宝app对于其他预先训练过的网络,如果你没有安装所需的支持包,那么应用程序将提供金宝app安装选择。

选择SqueezeNet从掠夺网络列表,然后单击开放

探索网络

深度网络设计器显示整个网络的缩小视图设计师窗格。

探索网络情节。要用鼠标放大,请使用Ctrl.+滚轮。要平移,请使用箭头键,或按住滚轮并拖动鼠标。选择一个图层以查看其属性。取消选择所有层以查看网络摘要特性窗格。

导入数据

将数据加载到深网络设计师身上数据选项卡上,单击导入数据>导入图像数据.将打开“导入图像数据”对话框。

数据源列表中,选择文件夹.点击浏览并选择“提取的MerchData”文件夹。

图像增强

您可以选择对训练数据应用图像增强。Deep Network Designer应用程序提供以下增强选项:

  • X轴中的随机反射

  • Y轴随机反射

  • 随机旋转

  • 随机重新划分

  • 随机水平翻译

  • 随机垂直翻译

通过对数据应用随机增强,可以有效地增加训练数据的数量。增强还使您能够训练网络以对图像数据的畸变保持不变。例如,可以向输入图像添加随机旋转,这样网络就不会因输入图像的旋转而改变。

对于本例,在x轴上应用随机反射,从[-90,90]度范围随机旋转,从[1,2]范围随机缩放。

验证数据

您还可以选择从训练数据中分离验证数据,或者从其他来源导入验证数据。验证将评估新数据与训练数据相比的模型性能,并帮助您监控性能和防止过拟合。

对于本例,使用30%的图像进行验证。

点击进口将数据导入深度网络设计器。

可视化数据

使用深度网络设计师,您可以直观地检查培训和验证数据的分布数据选项卡。您可以看到,在这个示例中,数据集中有5个类。您还可以看到每个类的随机观察结果。

准备培训网络

编辑网络设计师窗格以指定数据中的新类数目。为准备迁移学习的网络,替换最后一个可学习层和最后一个分类层。

替换最后一个可学习层

要使用预先训练过的网络进行迁移学习,必须更改班级数以匹配新的数据集。首先,找到网络中最后一个可学习层。对于SqueezeNet来说,最后一个可学习层是最后一个卷积层,“conv10”.在这种情况下,将卷积层替换为一个新的卷积层,该卷积层的过滤器数量等于类的数量。

拖动一个新的convolution2dLayer到画布上。为了匹配原始卷积层,设置FilterSize1,1

NumFilters属性定义分类问题的类数。改变NumFilters在新数据中的类数,在此示例中,5

更改学习率,使学习在新图层中比设置在传输的层中更快WeightLearnRateFactorBiaslearnratefactor.10

删除最后一个2d卷积层,并连接你的新层代替。

替换输出层

对于传输学习,您需要更换输出层。滚动到结尾图书馆库然后拖动一个新的classificationLayer到画布上。删除原来的分类层,并在其位置连接你的新层。

对于新的输出层,您不需要设置OutputSize.在训练时,Deep Network Designer自动从数据中设置该层的输出类。

检查网络

要检查网络已准备好进行培训,请单击分析.如果深度学习网络分析仪报告零错误,那么编辑后的网络就可以进行训练了。

列车网络的

在深度网络设计中,您可以在应用程序中培训导入或创建的网络。

使用默认设置训练网络,在训练选项卡上,单击火车.默认的训练选项更适合于大数据集,对于小数据集,可以减少小批量的大小和验证频率。

如果您想对培训有更大的控制,请单击培训选择选择训练的环境。

  • 将初始学习率设置为较小的值,以降低传输层的学习速度。

  • 指定验证频率,使验证数据的准确性进行一次每纪元计算。

  • 指定少量的纪元。epoch是整个训练数据集上的一个完整的训练周期。对于迁移学习,你不需要训练那么多的时代。

  • 指定迷你批量大小,即每次迭代中使用多少图像。为了确保在每个时代期间使用整个数据集,请设置迷你批次大小以均匀地划分训练样本的数量。

对于此示例,设置InitialLearnRate0.0001ValidationFrequency5,MaxEpochs8.因为有55个观察,所以MiniBatchSize11平均划分训练数据,确保在每个epoch使用整个训练数据集。有关选择培训选项的更多信息,请参见trainingOptions

要使用指定的培训选项培训网络,请单击关闭然后点击火车

深度网络设计师允许您可视化和监控培训进度。然后,如果需要,您可以编辑培训选项并重新培训网络。

导出结果并生成MATLAB代码

将网络架构与训练有素的权重导出训练选项卡,选择出口>出口培训的网络和结果.深网络设计器将培训的网络导出为变量训练网络_1.以及培训信息作为变量trainInfoStruct_1

trainInfoStruct_1
trainInfoStruct_1 =结构与字段:TrainingLoss:[4.2191 3.1255 2.6411 2.3362 3.1848 2.0195 1.2013 0.9902 1.8173 1.4625 0.8134 1.1901 0.8047 1.0542 0.7252 0.5411 0.5809 0.6819 0.4660 0.6830 0.7275 0.7365 0.4214 0.6107 0.2119 0.3021 0.3226 0.5457 0.1718 0.2522 0.1445…][0 18.1818 9.0909 27.2727 45.4545 63.6364 36.3636 45.4545 63.6364 36.3636 63.6364 45.4545 63.6364 81.8182 81.8182 81.8182 81.8182 81.8182 81.8182 81.8182 81.8182 81.8182 81.8182 100 72.7273 100 100 90.9091 72.7273 100 100 100 100…][3.6204楠楠楠2.4244楠楠楠1.7002楠楠楠1.0075楠楠楠0.7250楠楠楠0.5500楠楠楠0.4534楠楠楠0.4074楠楠楠0.3854]验证精度:[10.0000 NaN NaN NaN 30 NaN NaN NaN NaN 50 NaN NaN NaN NaN NaN 70 NaN NaN NaN NaN NaN NaN 80.0000 NaN NaN NaN NaN NaN NaN NaN NaN 80.0000 NaN NaN NaN NaN NaN NaN NaN 90 NaN NaN NaN NaN NaN NaN NaN 95 NaN NaN NaN NaN 95][1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04 1.0000e-04

您还可以生成MATLAB代码,重新创建网络和使用的培训选项。在这方面训练选项卡,选择出口>生成培训代码.检查MATLAB代码,学习如何以编程方式准备训练数据,创建网络架构,并训练网络。

分类新镜头

加载新图像以使用培训的网络对进行分类。

我= imread(“merchdattest.jpg”);

深度网络设计器在训练期间调整图像的大小,以匹配网络输入的大小。如果需要查看网络输入大小,请进入设计师窗格,并选择imageInputLayer(第一层)。该网络的输入大小为227×227。

调整测试图像的大小以匹配网络输入的大小。

I = imresize(I, [227 227]);

使用训练好的网络对测试图像进行分类。

[ypred,probs] =分类(troundnetwork_1,i);imshow(i)标签= ypred;标题(字符串(标签)+”、“+ num2str(100 *马克斯(聚合氯化铝),3)+“%”);

也可以看看

相关的话题