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