开始迁移学习
这个例子展示了如何使用迁移学习重新训练SqueezeNet(一个预训练的卷积神经网络)来分类一组新的图像。试试这个例子,看看在MATLAB®中开始深度学习是多么简单。
要获得示例的可视化演练,请观看视频。
迁移学习是深度学习应用中常用的一种方法。你可以使用预先训练好的网络,并将其作为学习新任务的起点。用迁移学习对网络进行微调通常比用随机初始化的权重从头训练网络更快更容易。您可以使用较少的训练图像快速将学习到的特征转移到新任务中。
提取数据
在工作空间中,提取MathWorks Merch数据集。这是一个包含75张MathWorks商品图片的小数据集,属于五个不同的类别(帽,多维数据集,打牌,螺丝刀,火炬).
解压缩(“MerchData.zip”);
负荷预训练网络
打开深度网络设计器。
deepNetworkDesigner
选择SqueezeNet从预训练网络列表中,单击开放.
深度网络设计器显示了整个网络的缩小视图。
探索网络情节。要用鼠标放大,请使用Ctrl+滚轮。若要平移,请使用方向键,或按住滚轮并拖动鼠标。选择一个图层来查看它的属性。中查看网络摘要属性窗格。
导入数据
要将数据加载到深度网络设计器中,请在数据选项卡上,单击导入数据>导入镜像数据.弹出“导入镜像数据”对话框。
在数据源列表中,选择文件夹.点击浏览并选择解压后的MerchData文件夹。
将数据分为70%的训练数据和30%的验证数据。
指定要对训练图像执行的增强操作。数据增强有助于防止网络过度拟合和记忆训练图像的确切细节。对于这个示例,在x轴上应用一个随机反射,在[-90,90]度范围内随机旋转,以及在[1,2]范围内随机缩放。
点击进口将数据导入Deep Network Designer。
编辑迁移学习网络
为了重新训练SqueezeNet对新图像进行分类,需要替换网络的最后一个2-D卷积层和最后一个分类层。在SqueezeNet中,这些图层都有名字“conv10”
而且“ClassificationLayer_predictions”
,分别。
在设计师窗格,拖动一个新的convolution2dLayer
画在画布上。为了匹配原始的卷积层,设置FilterSize
来1, - 1
.编辑NumFilters
为新数据中的类数,在本例中,5
.
改变学习率,使学习在新层比在转移层更快通过设置WeightLearnRateFactor
而且BiasLearnRateFactor
来10
.
删除最后一个2-D卷积层,连接你的新层。
替换输出层。滚动到末尾层的图书馆然后拖动一个新的classificationLayer
画在画布上。删除原来的输出层,并在原来的位置连接新层。
列车网络的
要选择培训选项,请选择培训选择并单击培训方案.将初始学习速率设置为较小的值,以降低迁移层的学习速度。在前面的步骤中,您增加了2-D卷积层的学习率因子,以加快新的最终层的学习速度。这种学习率设置的组合导致只在新层中快速学习,而在其他层中学习较慢。
对于本例,设置InitialLearnRate来0.0001
,ValidationFrequency来5
,MaxEpochs来8
.因为有55个观测值,所以设定MiniBatchSize来11
平均划分训练数据,确保每个纪元都使用整个训练集。
单击,使用指定的训练选项对网络进行训练关闭然后点击火车.
深度网络设计器允许您可视化和监控训练进度。然后,如果需要,您可以编辑训练选项并重新训练网络。
导出结果并生成MATLAB代码
输出培训结果,对培训选项卡上,选择出口>输出训练过的网络和结果.深度网络设计器导出训练好的网络作为变量trainedNetwork_1
训练信息作为变量trainInfoStruct_1
.
您还可以生成MATLAB代码,它可以重新创建网络和使用的训练选项。在培训选项卡上,选择出口>生成培训代码.检查MATLAB代码,学习如何以编程方式准备训练数据,创建网络架构,并训练网络。
新图像分类
加载一个新的图像,使用训练好的网络进行分类。
I = imread(“MerchDataTest.jpg”);
调整测试图像的大小以匹配网络输入大小。
I = imresize(I, [227 227]);
利用训练好的网络对测试图像进行分类。
[YPred,probs] = category (trainedNetwork_1,I);imshow(I) label = YPred;标题(string(标签)+”、“+ num2str(100*max(probs),3) +“%”);
参考文献
[1]ImageNet.http://www.image-net.org
Iandola, Forrest N,宋汉,Matthew W. Moskewicz, Khalid Ashraf, William J. Dally和Kurt Keutzer。“SqueezeNet: alexnet级精度,参数减少50倍,模型大小<0.5 MB。”预印本,2016年11月4日提交。https://arxiv.org/abs/1602.07360。
[3]伊安多拉,福雷斯特N“SqueezeNet。”https://github.com/forresti/SqueezeNet。
另请参阅
trainNetwork
|trainingOptions
|squeezenet
|深度网络设计器