此示例演示如何使用Deep Network Designer应用程序以交互方式执行迁移学习。
迁移学习是利用预先训练好的深度学习网络并对其进行微调以学习新任务的过程。使用迁移学习通常比从头开始训练网络更快更容易。您可以使用较少的数据量快速地将学习到的特征传输到新任务。
使用Deep Network Designer进行图像分类的迁移学习,步骤如下:
打开Deep Network Designer应用程序,选择一个预先训练的网络。
导入新的数据集。
将最后的层替换为适应新数据集的新层。
设置学习速率,使新层的学习速度快于转移层的学习速度。
使用深层网络设计器培训网络,或在命令行导出网络进行培训。
在工作区中,提取MathWorks Merch数据集。这是一个小数据集,包含75幅MathWorks商品图片,属于五个不同的类别(帽,多维数据集,打牌,螺丝刀,手电筒).
解压缩(“MerchData.zip”);
打开深网设计器,就可以了应用程序选项卡,在机器学习与深度学习,单击应用程序图标。或者,你可以从命令行打开应用程序:
deepNetworkDesigner
深度网络设计器提供了预先训练的图像分类网络的选择,这些网络学习了丰富的特征表示,适合于广泛的图像。如果您的图像与最初用于训练网络的图像相似,迁移学习效果最好。如果您的训练图像是像ImageNet数据库中那样的自然图像,那么任何预先训练的网络都是合适的。有关可用网络的列表以及如何比较它们,请参见预先训练的深度神经网络.
如果您的数据与ImageNet数据非常不同(例如,如果您有微小的图像、光谱图或非图像数据),那么训练一个新的网络可能会更好。有关如何从头开始训练网络的示例,请参见使用Deep Network Designer创建简单的序列分类网络和在Deep Network Designer中创建简单的语义分段网络.
SqueezeNet不需要额外的支持包。金宝app对于其他预先训练过的网络,如果你没有安装所需的支持包,那么应用程序将提供金宝app安装选择。
选择SqueezeNet从预训练网络列表中,单击开放.
Deep Network Designer在中显示整个网络的缩小视图设计师窗格。
探索网络情节。要用鼠标放大,请使用Ctrl+滚轮。要平移,请使用方向键,或按住滚轮并拖动鼠标。选择一个图层查看它的属性。取消选择所有层,查看网络摘要性质窗格。
将数据加载到深度网络设计器中,在数据选项卡上,单击导入数据>导入图像数据.打开“导入图像数据”对话框。
在数据源列表中,选择文件夹点击浏览并选择提取的MerchData文件夹。
您可以选择对训练数据应用图像增强。Deep Network Designer应用程序提供以下增强选项:
x轴上的随机反射
y轴上的随机反射
随机旋转
随机重缩放
随机水平翻译
随机垂直翻译
通过对数据应用随机增强,可以有效地增加训练数据的数量。增强还使您能够训练网络以对图像数据的畸变保持不变。例如,可以向输入图像添加随机旋转,这样网络就不会因输入图像的旋转而改变。
对于本例,在x轴上应用随机反射,从[-90,90]度范围内应用随机旋转,从[1,2]范围内应用随机重缩放。
您还可以选择从训练数据中分离验证数据,或者从其他来源导入验证数据。验证将评估新数据与训练数据相比的模型性能,并帮助您监控性能和防止过拟合。
对于本例,使用30%的图像进行验证。
点击进口将数据导入Deep Network Designer。
使用Deep Network Designer,您可以在数据选项卡。您可以看到,在这个示例中,数据集中有5个类。您还可以看到每个类的随机观察结果。
在中编辑网络设计师窗格以指定数据中的新类数目。为准备迁移学习的网络,替换最后一个可学习层和最后一个分类层。
要使用预先训练过的网络进行迁移学习,必须更改班级数以匹配新的数据集。首先,找到网络中最后一个可学习层。对于SqueezeNet来说,最后一个可学习层是最后一个卷积层,“conv10”
.在这种情况下,将卷积层替换为一个新的卷积层,该卷积层的过滤器数量等于类的数量。
拖动一个新的convolution2dLayer
到画布上。为了匹配原始卷积层,设置FilterSize
来1,1
.
的微粒过滤器
属性定义分类问题的类数。改变微粒过滤器
更改为新数据中的类数,在本例中,5
.
通过设置更改学习速率,使新层中的学习速度快于传输层中的学习速度WeightLearnRateFactor
和双线性学习因子
来10
.
删除最后一个2d卷积层,并连接你的新层代替。
对于迁移学习,您需要替换输出层。滚动到列表的末尾层的图书馆然后拖动一个新的classificationLayer
在画布上。删除原始分类层,并在其位置连接新层。
对于新的输出层,不需要设置OutputSize
.在训练时,Deep Network Designer自动从数据中设置该层的输出类。
要检查网络是否已准备好接受培训,请单击分析.如果深度学习网络分析仪报告零错误,那么编辑后的网络就可以进行训练了。
在Deep Network Designer中,您可以训练在应用程序中导入或创建的网络。
使用默认设置训练网络,在训练选项卡上,单击火车.默认的训练选项更适合于大数据集,对于小数据集,可以减少小批量的大小和验证频率。
如果您想对培训有更大的控制,请单击培训方案并选择要训练的设置。
将初始学习率设置为较小的值,以降低传输层的学习速度。
指定验证频率,以便每个历元计算一次验证数据的精度。
指定少量的纪元。epoch是整个训练数据集上的一个完整的训练周期。对于迁移学习,你不需要训练那么多的时代。
指定小批量大小,即在每个迭代中使用多少图像。为了确保在每个epoch使用整个数据集,设置小批量大小均匀地除以训练样本的数量。
对于本例,设置初始学习率来0.0001
,ValidationFrequency来5
,最大时代来8
. 因为有55个观测值,所以设置小批量来11
平均划分训练数据,确保在每个epoch使用整个训练数据集。有关选择培训选项的更多信息,请参见trainingOptions
.
要使用指定的培训选项培训网络,请单击关闭然后点击火车.
Deep Network Designer允许您可视化和监视培训进度。然后,如果需要,您可以编辑培训选项并重新培训网络。
要导出具有训练权重的网络体系结构,请在训练选项卡,选择出口>出口培训网络和成果.深度网络设计器输出训练有素的网络作为变量培训网络1
以培训信息作为变量trainInfoStruct_1
.
trainInfoStruct_1
trainInfoStruct_1 =带字段的结构:培训损失:[1×40双]培训准确性:[1×40双]验证损失:[4.3374南2.4329南1.3966南0.7526南0.6424南南0.6349南南0.5940南南0.5490南0.5179]验证准确性:[10楠楠楠楠15楠楠楠楠40楠楠楠楠70楠楠楠楠85楠楠楠90楠楠楠楠85楠楠楠楠楠楠90楠楠楠楠95]基本学习率:[1×40双倍]最终验证损失:0.5179最终验证精度:95
您还可以生成MATLAB代码,它可以重新创建网络和使用的培训选项。在训练选项卡,选择出口>生成培训代码.检查MATLAB代码,学习如何以编程方式准备训练数据,创建网络架构,并训练网络。
加载新图像以使用训练过的网络进行分类。
I=imread(“MerchDataTest.jpg”);
深度网络设计器在训练期间调整图像的大小,以匹配网络输入的大小。如果需要查看网络输入大小,请进入设计师窗格,并选择imageInputLayer
(第一层)。该网络的输入大小为227×227。
调整测试图像大小以匹配网络输入大小。
I = imresize(I, [227 227]);
使用训练好的网络对测试图像进行分类。
[YPred,probs]=分类(训练网络_1,I);imshow(I)标签=YPred;标题(字符串(标签)+", "+num2str(最大值为100*3)+“%”);