主要内容

开始迁移学习

此示例演示如何使用转移学习对预训练卷积神经网络SqueezeNet进行再训练,以对一组新图像进行分类。请尝试此示例,了解在MATLAB®中开始深度学习是多么简单。

迁移学习通常用于深度学习应用。你可以把一个预先训练好的网络作为学习新任务的起点。使用转移学习对网络进行微调通常比从头开始使用随机初始化权重训练网络要快得多,也容易得多。您可以使用较少数量的训练图像将学习到的功能快速传输到新任务。

提取数据

在工作空间中,提取MathWorks Merch数据集。这是一个包含75张MathWorks商品图像的小数据集,属于五个不同的类(,立方体,打牌,螺丝刀,火炬).

解压(“MerchData.zip”);

负载Pretrained网络

打开深层网络设计器。

deepNetworkDesigner

挑选挤压网从预训练网络列表中,单击打开

Deep Network Designer显示整个网络的缩小视图。

探索网络情节。要用鼠标放大,请使用Ctrl键+滚轮。若要平移,请使用箭头键,或按住滚轮并拖动鼠标。选择一个图层可查看其属性。取消选择所有图层可在中查看网络摘要性质窗格。

导入数据

要将数据加载到Deep Network Designer,请在数据选项卡,单击导入数据>导入图像数据. 将打开“导入图像数据”对话框。

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

将数据分为70%的培训数据和30%的验证数据。

指定要在训练图像上执行的增强操作。数据增强有助于防止网络过度拟合和记忆训练图像的确切细节。例如,在x轴上应用随机反射、从[-90,90]度范围进行随机旋转以及从[1,2]范围进行随机重缩放。

点击进口将数据导入深度网络设计器。

为迁移学习编辑网络

为了重新训练SqueezeNet对新图像进行分类,将最后一个二维卷积层替换为网络的最终分类层。在SqueezeNet中,这些图层都有名称“conv10”“ClassificationLayer_predictions”分别地

设计师窗格,拖动一个新的convolution2dLayer到画布上。为了匹配原始卷积层,设置FilterSize1,1编辑NumFilters为新数据中的类数,在本例中,5.

通过设置更改学习速率,使新层中的学习速度快于传输层中的学习速度加权比率因子双线性学习因子10

删除最后一个二维卷积层,然后连接新层。

替换输出层。滚动到末尾图层库并拖动一个新的分类层到画布上。删除原来的输出层,并在其位置连接你的新层。

列车网络

要选择培训选项,请选择培训选项卡并单击培训方案.将初始学习率设置为较小的值,以降低传输层的学习速度。在前面的步骤中,您增加了2d卷积层的学习率因子,以加速新的最终层中的学习。这种学习率设置的组合只会导致在新层中学习快,而在其他层中学习慢。

对于本例,设置InitialLearnRate0.0001,验证频率5.,MaxEpochs8..由于有55个观测值,设置MiniBatchSize11均匀划分训练数据,保证每个epoch使用整个训练集。

要使用指定的培训选项对网络进行培训,请单击接近然后单击火车

深度网络设计器允许您可视化和监控培训进度。如果需要,您可以编辑培训选项并对网络进行再培训。

导出结果并生成MATLAB代码

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

您还可以生成MATLAB代码,重新创建网络和使用的训练选项。上培训选项卡上,选择出口>生成培训代码. 检查MATLAB代码,了解如何以编程方式准备训练数据、创建网络体系结构和训练网络。

对新图像进行分类

加载新图像以使用训练过的网络进行分类。

我= imread (“MerchDataTest.jpg”);

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

I=imresize(I,[227]);

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

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

参考文献

[1]图像网.http://www.image-net.org

[2] 伊恩多拉、福雷斯、宋汉、马修·W·莫斯科维奇、哈立德·阿什拉夫、威廉·J·戴利和库尔特·库策。“挤压网:AlexNet级精度,参数少50倍,模型尺寸<0.5 MB。”预印本,2016年11月4日提交。https://arxiv.org/abs/1602.07360.

福雷斯特·伊安多拉“SqueezeNet。”https://github.com/forresti/SqueezeNet。

另见

|||

相关的话题