主要内容

转移学习与深层网络设计师

这个例子展示了如何执行转移学习交互地使用深层网络设计师应用。

把学习的过程是一个pretrained深度学习网络和微调学会一个新任务。学习使用转移通常是更快和更容易比从头培训网络。您可以快速学习功能转移到一个新的任务使用一个较小的数据量。

使用深度网络设计师执行转移学习图像分类通过以下步骤:

  1. 打开网络设计师应用和选择pretrained网络。

  2. 导入新数据集。

  3. 最后一层替换为新图层适应新的数据集。

  4. 设置学习利率,以便学习更快的新层传输层。

  5. 列车网络使用深层网络设计师,在命令行或出口网络培训。

提取数据

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

解压缩(“MerchData.zip”);

选择一个Pretrained网络

打开深层网络设计师,应用程序选项卡,在机器学习和深度的学习,点击应用程序图标。另外,您也可以从命令行打开应用程序:

deepNetworkDesigner

深层网络设计师提供了一个选择pretrained图像分类网络,学到丰富的特性表征适合广泛的图像。转移学习效果最好,如果你的图像相似的图像最初用于训练网络。如果你的训练图像自然图像像那些在ImageNet数据库中,那么任何pretrained网络是合适的。可用网络列表,如何进行比较,看看Pretrained深层神经网络

如果您的数据是非常不同于ImageNet数据,如果你有小图像,声音,或者非成象data-training新的网络可能会更好。为例子展示如何从头开始训练网络,看到的创建简单的序列分类网络使用深层网络设计师训练简单的语义分割网络深陷网络设计师

SqueezeNet不需要额外的支持包。金宝app对于其他pretrained网络,如果你没有安装所需的支持包,然后应用程序提供了金宝app安装选择。

选择SqueezeNet从pretrained网络的列表并点击开放

探索网络

深层网络设计师显示缩放视图的整个网络设计师窗格。

探索网络图。放大用鼠标,使用Ctrl+滚轮。锅,使用箭头键或按住并拖动鼠标的滚轮。选择一个图层查看其属性。取消选择所有图层来查看网络总结属性窗格。

导入数据

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

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

图像增强

你可以选择应用图像增强你的训练数据。深层网络设计师应用提供了以下增加选项:

  • 随机反射的轴

  • 随机反射的轴

  • 随机旋转

  • 随机重新调节

  • 随机水平翻译

  • 随机垂直翻译

可以有效地增加训练数据通过应用随机增加到你的数据。增加还使您能够训练网络是扭曲图像数据不变。例如,您可以添加随机旋转输入图像,这样一个网络是存在旋转不变的输入图像。

对于这个示例,应用随机反射轴,一个随机的旋转范围(-90、90)度,和一个随机重新调节范围[1,2]。

验证数据

你也可以选择导入验证数据通过分裂从训练数据,或者通过导入另一个来源。验证预测模型性能的新数据与训练数据相比,和帮助您监控性能和防止过度拟合。

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

点击进口将数据导入到深层网络设计师。

可视化数据

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

准备培训网络

编辑的网络设计师面板中指定一个新类中数据的数量。准备学习网络传输,代替过去可学的层和最后分类层。

取代最后可学的层

使用pretrained传输网络学习,你必须改变类的数量来匹配你的新数据集。首先,在网络找到最后一个可学的层。SqueezeNet,最后可学的一层一层是最后卷积,“conv10”。在这种情况下,将卷积层替换为一个新的卷积层过滤器的数量等于类的数量。

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

NumFilters属性定义了类的数量分类问题。改变NumFilters在新数据类的数量,在这个例子中,5

改变利率,这样学习是学习更快的新层的传输层的设置WeightLearnRateFactorBiasLearnRateFactor10

删除最后一个二维卷积层和连接你的新层。

替换输出层

迁移学习,你需要替换输出层。滚动到结束的层的图书馆并拖动一个新的classificationLayer到画布上。删除原来的分类层和连接你的新层。

对于一个新的输出层,您不需要设置OutputSize。在训练时,深层网络设计师自动设置输出类层的数据。

检查网络

检查网络是否准备好培训,点击分析。如果深度学习网络分析仪报告零错误,然后编辑网络准备培训。

列车网络的

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

培训网络使用默认设置,在培训选项卡上,单击火车。默认选项更适合大型数据集训练,对于小数据集减少mini-batch大小和验证的频率。

如果你想要更大的控制训练,点击培训方案并选择设置训练。

  • 设置初始学习速率减缓学习在一个较小的值传输层。

  • 指定验证频率,以便验证数据的准确性是计算一次时代。

  • 指定一个小数量的时代。一个时代是一个完整的培训周期在整个训练数据集。转移学习,你不需要训练尽可能多的时代。

  • 指定mini-batch大小,多少图片在每个迭代中使用。以确保整个数据集在每个时代,设置mini-batch大小均匀划分训练样本的数量。

对于这个示例,集InitialLearnRate0.0001,ValidationFrequency5,MaxEpochs8。有55的观察,集MiniBatchSize11把训练数据均匀,确保你使用整个训练数据集在每个时代。选择培训选项的更多信息,请参阅trainingOptions

训练的网络培训指定选项,点击关闭然后点击火车

深层网络设计师允许您可视化和监控培训的进展。然后您可以编辑培训选项和培训网络,如果需要的话。

导出结果,生成MATLAB代码

出口的网络体系结构训练权重,在培训选项卡上,选择出口>出口网络和训练的结果。深层网络设计师出口训练网络的变量trainedNetwork_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…] TrainingAccuracy: [0 18.1818 9.0909 27.2727 18.1818 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 72.7273 90.9091 81.8182 81.8182 81.8182 100 72.7273 100 100 100 100 100 100…] ValidationLoss:[3.6204 1.7002 2.4244南南南南南南南南南南南南南南南1.0075 0.7250 0.4534 0.5500南南南南南南南南南南南南南南南南0.4074 0.3854]ValidationAccuracy: 30[10.0000南南南南南南南南南南南70 80.0000 80.0000南南南南南南南南南南南南90 95年南南南南南南南南95]BaseLearnRate: [1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 e-04 e-04 e-04 e-04 e-04 e-04 e-04 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 e-04 e-04 e-04 e-04 e-04 e-04 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 e-04 e-04 e-04 e-04 e-04 e-04 1.0000 e-04…] FinalValidationLoss: 0.3854 FinalValidationAccuracy: 95 OutputNetworkIteration: 40

你也可以生成MATLAB代码,再现了网络和使用培训选项。在培训选项卡上,选择出口>生成代码的训练。检查MATLAB代码来学习如何编程的数据准备培训,创建网络体系结构,和培训网络。

分类新形象

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

我= imread (“MerchDataTest.jpg”);

深层网络设计师调整图像的大小在训练输入匹配网络的大小。查看网络输入大小,去设计师窗格中,选择imageInputLayer(第一层)。这个网络有一个输入的大小227 - 227。

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

I = imresize(我,(227 227));

分类测试图像使用训练网络。

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

另请参阅

相关的话题