本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

Deep Network Designer 快速入门

此示例说明如何微调预训练的 GoogLeNet 网络以对新的图像集合进行分类。此过程称为迁移学习,通常比训练新网络更快更容易,因为您可以使用较少数量的训练图像将已学习的特征应用于新任务。要以交互方式准备用于迁移学习的网络,请使用 Deep Network Designer。

提取要训练的数据

在工作区中,解压缩数据。

unzip('MerchData.zip');

选择预训练网络

打开 Deep Network Designer。

deepNetworkDesigner

通过从 Deep Network Designer 首页中选择一个预训练的 GoogLeNet 网络来加载它。如果您需要下载该网络,请点击安装获取附加功能资源管理器的链接。

Deep Network Designer 将显示整个网络的缩小视图。浏览网络图。要使用鼠标放大,请使用 Ctrl + 滚轮。

加载数据集

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

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

该对话框还允许您从 App 中拆分验证数据。将数据分为 70% 用作训练数据,30% 用作验证数据。

指定要对训练图像执行的增强操作。对于此示例,在 x 轴上进行随机翻转,在 [-90,90] 度范围内进行随机旋转,在 [1,2] 范围内进行随机重新缩放。

点击导入将数据导入 Deep Network Designer。

Deep Network Designer 会在训练期间调整图像大小,以匹配网络输入大小。要查看网络输入大小,请在 Designer 窗格上,点击 imageInputLayer。此网络的输入大小为 224×224。

编辑迁移学习网络

使用 Deep Network Designer,您可以在数据窗格中直观地查看训练和验证数据的分布情况。您可以看到在此示例中数据集中有五个类。

要对预训练网络进行重新训练以对新图像进行分类,请将最终层替换为适合新数据集的新层。

Designer 窗格中,将新的 fullyConnectedLayer网络层库拖到画布上。将 OutputSize 设置为新数据中的类数,此示例中为 5

编辑学习率,以使新层中的学习速度快于迁移层的学习速度。将 WeightLearnRateFactorBiasLearnRateFactor 设置为 10。删除最后一个全连接层,改为连接新层。

替换输出层。滚动到网络层库的末尾,将一个新的 classificationLayer 拖到画布上。删除原来的 output 层,改为连接新层。

检查网络

要确保编辑后的网络已准备好训练,请点击分析,并确保 Deep Learning Network Analyzer 报告零错误。

训练网络

要使用默认设置训练网络,请在训练选项卡上,点击训练

如果您要更好地控制训练,请点击训练选项,然后选择训练所用的设置。默认训练选项更适合大型数据集。对于小型数据集,请对 MiniBatchSizeValidationFrequency 使用较小的值。有关选择训练选项的详细信息,请参阅trainingOptions

对于此示例,请将 InitialLearnRate 设置为 0.0001,将 ValidationFrequency 设置为 5,将 MaxEpochs 设置为 8. 。由于有 55 个观测值,因此请将 MiniBatchSize 设置为 11 以平均划分训练数据,并确保在每轮训练期间都用到整个数据集。

要使用指定的训练选项训练网络,请点击关闭,然后点击训练

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

导出训练结果

要导出训练结果,请在训练选项卡上选择导出 > 导出经过训练的网络和结果。Deep Network Designer 将经过训练的网络导出为变量 trainedNetwork_1,将训练信息导出为变量 trainInfoStruct_1

您也可以生成 MATLAB 代码,它可以重新创建所使用的网络和训练选项。在训练选项卡上,选择导出 > 生成训练代码

测试经过训练的网络

选择一个新图像以使用经过训练的网络对其进行分类。

I = imread("MerchDataTest.jpg");

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

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

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

[YPred,probs] = classify(trainedNetwork_1,I);
imshow(I)
label = YPred;
title(string(label) + ", " + num2str(100*max(probs),3) + "%");

有关详细信息,包括关于其他预训练网络的信息,请参阅Deep Network Designer

另请参阅

相关主题