主要内容

使用Deep Network Designer进行迁移学习

此示例演示如何使用Deep Network Designer应用程序以交互方式执行迁移学习。

迁移学习是一个获取经过预训练的深度学习网络并对其进行微调以学习新任务的过程。使用迁移学习通常比从头开始训练网络更快、更容易。您可以使用较少的数据量将学习到的功能快速迁移到新任务。

使用Deep Network Designer通过以下步骤执行图像分类的转移学习:

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

  2. 导入新的数据集。

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

  4. 设置学习速率,使新层的学习速度快于转移层的学习速度。

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

提取数据

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

解压(“MerchData.zip”);

选择预训练网络

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

deepNetworkDesigner

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

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

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

选择SqueezeNet从预训练网络列表中,单击开放

探索网络

Deep Network Designer在中显示整个网络的缩小视图设计师窗格。

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

导入数据

要将数据加载到Deep Network Designer,请在数据选项卡上,单击导入数据>导入图像数据. 将打开“导入图像数据”对话框。

数据源列表中,选择文件夹点击浏览然后选择提取的MerchData文件夹。

图像增强

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

  • x轴上的随机反射

  • y轴上的随机反射

  • 随机旋转

  • 随机重缩放

  • 随机水平平移

  • 随机垂直翻译

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

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

验证数据

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

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

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

可视化数据

使用Deep Network Designer,您可以在数据选项卡。您可以看到,在这个示例中,数据集中有5个类。您还可以看到每个类的随机观察结果。

为培训准备网络

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

替换最后一个可学习层

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

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

NumFilters属性定义分类问题的类数。更改NumFilters对于新数据中的类数,在本例中,5

通过设置更改学习速率,使新层中的学习速度快于传输层中的学习速度加权比率因子双线性学习因子10

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

替换输出层

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

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

检查网络

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

列车网络的

在Deep Network Designer中,您可以训练在应用程序中导入或创建的网络。

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

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

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

  • 指定验证频率,以便每个历元计算一次验证数据的精度。

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

  • 指定最小批量大小,即每次迭代中要使用的图像数。为确保在每个历元期间使用整个数据集,请将最小批量大小设置为平均分割训练样本数。

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

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

Deep Network Designer允许您可视化和监视培训进度。然后,您可以编辑培训选项并在需要时重新培训网络。

导出结果并生成MATLAB代码

要导出具有训练权重的网络体系结构,请在训练选项卡,选择出口>出口培训网络和成果. Deep Network Designer将经过训练的网络导出为变量培训网络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代码,学习如何以编程方式准备训练数据,创建网络架构,并训练网络。

对新图像进行分类

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

I=imread(“MerchDataTest.jpg”);

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

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

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

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

[YPred,probs]=classify(训练网络_1,I);imshow(I)label=YPred;title(字符串(标签)+", "+ num2str(100 *马克斯(聚合氯化铝),3)+“%”);

另见

相关的话题