主要内容

使用深度网络设计师进行迁移学习

这个例子展示了如何使用Deep Network Designer应用程序交互式地执行迁移学习。

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

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

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

  2. 导入新数据集。

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

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

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

提取数据

在工作空间中,提取MathWorks Merch数据集。这是一个包含75张MathWorks商品图像的小数据集,属于五个不同的类(帽子立方体扑克牌螺丝刀,及火炬).

解压缩(“MerchData.zip”);

选择预训练网络

要打开Deep Network Designer,请在应用标签,下面机器学习和深度学习,单击“应用”图标。或者,您可以从命令行打开应用程序:

DeepNetWorkDesigner.

Deep Network Designer提供了一系列经过预训练的图像分类网络,这些网络学习了适用于各种图像的丰富特征表示。如果您的图像与最初用于训练网络的图像相似,则转移学习效果最佳。如果您的训练图像与ImageNet数据库中的图像一样是自然图像,则任何预训练网络都是合适的。有关可用网络的列表以及如何比较这些网络,请参阅预训练深度神经网络

如果您的数据与ImageNet数据非常不同 - 例如,如果您有微小的图像,频谱图或非图像数据训练,则新网络可能更好。有关显示如何从划伤训练网络的示例,请参阅使用深度网络设计器创建简单的序列分类网络在深度网络设计器中创建简单的语义分割网络

Screezenet不需要额外的支持包。万博1manbetx对于其他佩带的网络,如果您没有安装所需的支持包,则该应用程序提供了万博1manbetx安装选项

选择挤压从预先训练的网络列表中单击打开

探索网络

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

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

导入数据

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

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

图像增强

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

  • x轴上的随机反射

  • y轴上的随机反射

  • 随机旋转

  • 随机重新调节

  • 随机水平翻译

  • 随机垂直翻译

通过对数据应用随机增强,可以有效地增加训练数据量。增强还使您能够训练网络,使其对图像数据中的失真保持不变。例如,可以将随机旋转添加到输入图像中,以便网络对输入图像中旋转的存在保持不变。

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

验证数据

您还可以选择通过从培训数据拆分或从另一个来源导入验证数据来导入验证数据。验证与培训数据相比,验证对新数据的模型性能,并帮助您监控性能并防止过度装备。

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

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

可视化数据

使用深度网络设计器,您可以直观地查看训练和验证数据的分布资料窗玻璃您可以看到,在这个示例中,数据集中有五个类。您还可以看到每个类的随机观察结果。

准备培训网络

编辑网络在设计师窗格在您的数据中指定新的类。要准备网络进行传输学习,请替换最近的学习层和最终分类层。

替换最后的学习层

要使用备用网络进行传输学习,您必须更改匹配新数据集的类数。首先,找到网络中的最后一个可知图层。对于Sheeezenet,最后的学习层是最后一个卷积层,'conv10'. 在这种情况下,用一个新的卷积层替换卷积层,滤波器的数量等于类的数量。

拖动一个新的卷积层在画布上。要匹配原始卷积层,请设置过滤1,1

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

通过设置改变学习速率,使新层的学习速度比转移层的学习速度快举重BiasLearnRateFactor10.

删除最后2-D卷积层并改为连接新图层。

替换输出层

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

对于新的输出层,不需要设置输出.在培训时,深网络设计器自动从数据中设置图层的输出类。

检查网络

要检查网络是否为培训做好了准备,请单击分析. 如果Deep Learning Network Analyzer报告零错误,则编辑的网络已准备好进行培训。

火车网络

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

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

如果您想要更好地控制培训,请单击培训方案选择训练的环境。

  • 将初始学习速率设置为小值以减慢传输的图层中的学习。

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

  • 指定少数时期。epoch是整个培训数据集的完整培训周期。对于转移学习,您不需要为尽可能多的时代培训。

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

对于本例,setInitialLearnRate0.0001验证频繁5.,及MaxEpochs8..因为有55个观察结果,设定MiniBatchSize11.均匀地划分培训数据并确保您在每个时代期间使用整个训练数据。有关选择培训选项的详细信息,请参阅培训选项

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

深度网络设计器允许您可视化和监控培训进度。如果需要,您可以编辑培训选项并对网络进行再培训。

导出结果并生成MATLAB代码

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

trainInfoStruct_1
trainInfoStruct_1=结构体字段:TrainingLoss:[1×40双]TrainingAccuracy:[1×40双]ValidationLoss:[4.3374 1.3966 2.4329南南南南南南南南南南南南南南南0.7526 0.6424 0.5940 0.6349南南南南南南南南南南南南南南南南0.5490 0.5179]ValidationAccuracy:[10 15南南南南南南南南南南南70 90 85年南南南南南南南南南南南南85 90年南南南南南南南南95]BaseLearnRate:[1×40双]FinalValidationLoss: 0.5179 FinalValidationAccuracy: 95

您还可以生成MATLAB代码,该代码重新创建网络和使用的培训选项。在这一点培训选项卡上,选择出口>生成用于培训的代码.检查MATLAB代码以了解如何以编程方式准备培训数据,创建网络架构和培训网络。

分类新镜头

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

我= imread (“merchdattest.jpg”);

Deep Network Designer在培训期间调整图像大小以匹配网络输入大小。要查看网络输入大小,请转到设计师窗格,然后选择imageInputlayer.(第一层)。这个网络的输入尺寸是227乘227。

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

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

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

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

也可以看看

相关话题