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