主要内容

基于深度网络设计器的迁移学习

这个例子展示了如何使用深度网络设计器应用程序交互地执行迁移学习。

迁移学习是将预先训练好的深度学习网络进行微调以学习新任务的过程。使用迁移学习通常比从零开始训练一个网络更快更容易。您可以使用较少的数据量将学到的特征快速地转移到新任务中。

使用深度网络设计器对图像分类执行迁移学习,步骤如下:

  1. 打开深度网络设计器应用程序,选择一个预先训练的网络。

  2. 导入新的数据集。

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

  4. 设置学习速率,使新层中的学习速度比迁移层中的学习速度快。

  5. 使用Deep network Designer对网络进行培训,或在命令行中导出网络进行培训。

提取数据

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

解压缩(“MerchData.zip”);

选择预训练网络

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

deepNetworkDesigner

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

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

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

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

探索网络

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

探索网络情节。要用鼠标放大,使用Ctrl+滚轮。若要移动,请使用方向键,或按住滚轮并拖动鼠标。选择一个图层查看它的属性。中查看网络摘要属性窗格。

导入数据

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

数据源列表中,选择文件夹.点击浏览并选择解压的MerchData文件夹。

图像增强

您可以选择对训练数据应用图像增强。深度网络设计器应用程序提供了以下增强选项:

  • x轴上的随机反射

  • y轴上的随机反射

  • 随机旋转

  • 随机重新调节

  • 随机水平翻译

  • 随机垂直翻译

通过对数据应用随机增强,可以有效地增加训练数据的数量。增强还使您能够训练网络不受图像数据失真的影响。例如,您可以向输入图像添加随机旋转,以便网络对输入图像中的旋转不受影响。

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

验证数据

您还可以通过从训练数据中分离验证数据(称为坚持验证)或从另一个源导入验证数据来选择验证数据。验证评估新数据与训练数据的模型性能,并帮助您监控性能并防止过拟合。

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

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

可视化数据

使用深度网络设计器,您可以直观地检查训练和验证数据在数据选项卡。您可以看到,在本例中,数据集中有五个类。您还可以看到来自每个类的随机观察。

准备培训网络

编辑中的网络设计师窗格以指定数据中的新类数目。为了使网络能够进行迁移学习,需要替换最后一个可学习层和最后一个分类层。

替换最后一个可学习层

要使用预训练的网络进行迁移学习,必须更改类的数量以匹配新的数据集。首先,找到网络中最后一个可学习层。对于SqueezeNet,最后一个可学习层是最后一个卷积层,“conv10”.在本例中,用一个新的卷积层替换卷积层,其过滤器的数量等于类的数量。

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

NumFilters属性为分类问题定义类的数量。改变NumFilters到新数据中的类数量,在本例中,5

更改学习速率,使学习在新层比在迁移层更快WeightLearnRateFactor而且BiasLearnRateFactor10

删除最后一个二维卷积层,并连接新层。

替换输出层

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

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

检查网络

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

列车网络的

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

使用默认设置训练网络培训选项卡上,单击火车.默认的训练选项更适合大数据集,因为小数据集减少了小批处理的大小和验证频率。

如果您想对训练进行更大的控制,请单击培训方案然后选择要训练的设置。

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

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

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

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

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

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

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

若要将训练图保存为图像,请单击出口培训策划

导出结果并生成MATLAB代码

导出具有训练权重的网络体系结构培训选项卡上,选择出口>导出培训网络和结果.Deep Network Designer将训练过的网络作为变量导出trainedNetwork_1训练信息作为变量trainInfoStruct_1

trainInfoStruct_1
trainInfoStruct_1 =结构体字段:TrainingLoss:[3.1028 3.7235 3.5007 1.2493 1.5267 1.4770 1.2506 1.5767 1.0273 1.1279 0.6417 0.7218 0.7767 0.4651 0.7253 0.5403 0.5126 0.3012 0.6455 0.3326 0.2897 0.4604 0.3298 0.1844 0.2311 0.1436 0.1762 0.2212 0.1762 0.2212 0.0945 0.3570 0.1205…]TrainingAccuracy: [36.3636 27.2727 0.1727 45.4545 36.3636 36.3636 63.6364 36.3636 63.6364 36.3636 63.6364 72.7273 90.9091 81.8182 100 81.8182 100 100 81.8182 81.8182 100 100 81.8182 100 100 100 .] ValidationLoss:[3.4224 0.8457 1.6053南南南南南南南南南南南南南南南南南南南0.4317 0.4648 0.3389 0.4322 0.3652南南南南南南南南南南南南0.4720]ValidationAccuracy:[70 30南南南南南南南南南南南南南南南85 80年85年85年南南南南南南南南南南南南南南南南85 90]BaseLearnRate:[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…]FinalValidationLoss: 0.4720 FinalValidationAccuracy: 90 OutputNetworkIteration: 40

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

分类新形象

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

我= imread (“MerchDataTest.jpg”);

深度网络设计器在训练过程中调整图像的大小以匹配网络输入大小。要查看网络输入大小,请转到设计师窗格并选择imageInputLayer(第一层)。该网络的输入大小为227 * 227。

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

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

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

(YPred,聚合氯化铝)= (trainedNetwork_1, I)进行分类;imshow(I) label = YPred;标题(string(标签)+”、“+ num2str(100 *马克斯(聚合氯化铝),3)+“%”);

另请参阅

相关的话题

Baidu
map