开始使用深度网络设计器
这个例子展示了如何使用深度网络设计器来调整预先训练好的GoogLeNet网络来分类新的图像集合。这个过程被称为迁移学习,通常比训练一个新的网络更快更容易,因为你可以使用更少的训练图像将学习到的特征应用到一个新的任务中。要为交互迁移学习准备一个网络,请使用深度网络设计器。
为培训提取数据
在工作空间中,解压缩数据。
解压缩(“MerchData.zip”);
选择一个预训练的网络
打开深度网络设计器。
deepNetworkDesigner
通过从深度网络设计器开始页中选择加载预训练的GoogLeNet网络。如果需要下载网络,请单击安装打开附加组件资源管理器。
深度网络设计器显示了整个网络的缩小视图。探索网络情节。要用鼠标放大,请使用Ctrl+滚轮。
负载数据集
要将数据加载到深度网络设计器中,请在数据选项卡上,单击导入数据>导入镜像数据.弹出“导入镜像数据”对话框。
在数据源列表中,选择文件夹.点击浏览并选择解压后的MerchData文件夹。
对话框还允许您从应用程序内部分割验证数据。将数据分为70%的训练数据和30%的验证数据。
指定要对训练图像执行的增强操作。对于这个示例,在x轴上应用一个随机反射,在[-90,90]度范围内随机旋转,以及在[1,2]范围内随机缩放。
点击进口将数据导入Deep Network Designer。
使用深度网络设计器,您可以直观地检查训练和验证数据的分布数据选项卡。您可以看到,在本例中,数据集中有五个类。您还可以查看每个类的随机观察结果。
深度网络设计器在训练过程中调整图像大小以匹配网络输入大小。中查看网络输入大小设计师选项卡,单击imageInputLayer
.该网络的输入大小为224 × 224。
编辑迁移学习网络
为了重新训练一个预先训练好的网络来分类新图像,用适应新数据集的新层替换最后的可学习层和最终的分类层。在GoogLeNet中,这些层都有名称“loss3-classifier”
而且“输出”
,分别。
在设计师选项卡,拖动一个新的fullyConnectedLayer
从层的图书馆画在画布上。集OutputSize
到新数据中的类数,在这个例子中,5
.
编辑学习率,以便在新层中比在转移层中学习更快。集WeightLearnRateFactor
而且BiasLearnRateFactor
来10
.删除最后一个完全连接的层,并连接你的新层。
替换输出层。滚动到末尾层的图书馆然后拖动一个新的classificationLayer
画在画布上。删除原文输出
图层和连接你的新图层。
检查网络
通过单击检查网络分析.如果深度学习网络分析仪报告零错误,则网络准备训练。
列车网络的
若要使用默认设置训练网络,请在培训选项卡上,单击火车.
如果您希望对培训进行更大的控制,请单击培训方案然后选择要训练的设置。默认的训练选项更适合大型数据集。对于小数据集,使用较小的值作为小批大小和验证频率。有关选择培训选项的更多信息,请参见trainingOptions
.
对于本例,设置InitialLearnRate来0.0001
,ValidationFrequency来5
,MaxEpochs来8
.因为有55个观测值,所以设定MiniBatchSize来11
平均划分训练数据,确保每个纪元都使用整个训练集。
单击,使用指定的训练选项对网络进行训练关闭然后点击火车.
深度网络设计器允许您可视化和监控训练进度。然后,如果需要,您可以编辑训练选项并重新训练网络。
输出培训成果
输出培训结果,对培训选项卡上,选择出口>输出训练过的网络和结果.深度网络设计器导出训练好的网络作为变量trainedNetwork_1
训练信息作为变量trainInfoStruct_1
.
您还可以生成MATLAB代码,它可以重新创建网络和使用的训练选项。在培训选项卡上,选择出口>生成培训代码.
测试训练网络
使用训练好的网络选择一个新的图像进行分类。
I = imread(“MerchDataTest.jpg”);
调整测试图像的大小以匹配网络输入大小。
I = imresize(I, [224 224]);
利用训练好的网络对测试图像进行分类。
[YPred,probs] = category (trainedNetwork_1,I);imshow(I) label = YPred;标题(string(标签)+”、“+ num2str(100*max(probs),3) +“%”);
有关更多信息,包括其他预训练网络,请参见深度网络设计器.