深度网络设计器快速入门
此示例说明如何使用深度网络设计器来适应预训练的 GoogLeNet 网络以对新的图像集合进行分类。此过程称为迁移学习,通常比训练新网络更快更容易,因为您可以使用较少数量的训练图像将已学习的特征应用于新任务。要以交互方式准备用于迁移学习的网络,请使用深度网络设计器。
提取要训练的数据
在工作区中,解压缩数据。
unzip('MerchData.zip');
选择预训练网络
打开深度网络设计器。
deepNetworkDesigner
通过从深度网络设计器起始页中选择一个预训练的 GoogLeNet 网络来进行加载。如果您需要下载网络,可点击安装,打开附加功能资源管理器。
深度网络设计器将显示整个网络的缩小视图。浏览网络图。要使用鼠标放大,请使用 Ctrl + 滚轮。
加载数据集
要将数据加载到深度网络设计器中,请在数据选项卡上,点击导入数据 > 导入图像分类数据。
在数据源列表中,选择文件夹。点击浏览并选择提取的 MerchData 文件夹。
该对话框还允许您从 App 中拆分验证数据。将数据分为 70% 用作训练数据,30% 用作验证数据。
指定要对训练图像执行的增强操作。对于此示例,在 x 轴上进行随机翻转,在 [-90,90] 度范围内进行随机旋转,在 [1,2] 范围内进行随机重新缩放。
点击导入将数据导入深度网络设计器。
使用深度网络设计器,您可以在数据选项卡中直观地查看训练和验证数据的分布情况。您可以看到在此示例中数据集中有五个类。您还可以查看每个类的随机观测值。
深度网络设计器会在训练期间调整图像大小,以匹配网络输入大小。要查看网络输入大小,请在设计器选项卡中,点击 imageInputLayer
。此网络的输入大小为 224×224。
编辑迁移学习网络
要对预训练网络进行重新训练以对新图像进行分类,请使最后一个可学习层和最终分类层适应新数据集。在 GoogLeNet 中,这两个层的名称分别为 'loss3-classifier'
和 'output'
。
在设计器选项卡中,点击最终全连接层 'loss3-classifier'
。在属性窗格的底部,点击解锁层。在出现的警告对话框中,点击仍要解锁。这将解锁层属性,以便您可以使其适应新任务。
在 R2023b 之前:要编辑层属性,您必须替换层,而不是解锁层。
将 OutputSize
设置为新数据中的类数量,此示例中为 5
。
编辑学习率,以使新层中的学习速度快于迁移层的学习速度。将 WeightLearnRateFactor
和 BiasLearnRateFactor
设置为 10
。
选择分类层 'output'
,点击解锁层,然后点击仍要解锁。对于解锁的输出层,不需要设置 OutputSize
。在训练时,深度网络设计器会根据数据自动设置层的输出类。
检查网络
通过点击分析检查您的网络。如果深度学习网络分析器报告零错误,则表示网络已准备就绪,可以开始训练。
训练网络
要使用默认设置训练网络,请在训练选项卡上,点击训练。
如果您要更好地控制训练,请点击训练选项,然后选择训练所用的设置。默认训练选项更适合大型数据集。对于小型数据集,请对小批量大小和验证频率使用较小值。有关选择训练选项的详细信息,请参阅trainingOptions
。
对于此示例,将 InitialLearnRate 设置为 0.0001
,MaxEpochs 设置为 8
,ValidationFrequency 设置为 5
。由于有 55 个观测值,因此将 MiniBatchSize 设置为 11
以平均划分训练数据,并确保在每轮期间使用整个训练集。
要使用指定的训练选项训练网络,请点击确定,然后点击训练。
深度网络设计器允许您可视化和监控训练进度。然后,如果需要,您可以编辑训练选项并重新训练网络。
导出训练结果
要导出训练结果,请在训练选项卡上选择导出 > 导出经过训练的网络和结果。深度网络设计器将经过训练的网络导出为变量 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) + "%");
有关详细信息,包括关于其他预训练网络的信息,请参阅深度网络设计器。