这个例子说明了如何使用迁移学习再培训SqueezeNet,预训练卷积神经网络,一组新的图片进行分类。尝试这个例子,看看它是如何简单上手的MATLAB®深度学习。
迁移学习在深学习应用中常用的。你可以采取预训练网络,并以此为起点,学习新的任务。微调与迁移学习网络是比从头随机初始化的权重训练的网络通常更快,更容易。你可以学到功能迅速转移到使用训练图像的数少的新任务。
在工作区中,提取MathWorks的专卖品数据集。这是包含MathWorks公司的商品75倍的图像的小数据集,属于五个不同的类别(帽,立方体,扑克牌,螺丝刀和火炬)。
解压(“MerchData.zip”);
打开深层网络设计者。
deepNetworkDesigner
选择SqueezeNet从预训练的网络,并点击列表打开。
深层网络设计者显示整个网络的一个缩小的视图。
探索网络曲线。用鼠标,使用放大按Ctrl+滚轮。要平移,请使用箭头键,或者按住滚轮并拖动鼠标。选择一个层,以查看其属性。取消选择所有的层,以查看在网络摘要属性窗格。
要加载数据到深层网络设计者,在数据选项卡,单击导入数据。将打开导入数据对话框。
在里面数据源列表中,选择夹。请点击浏览并选择所提取的MerchData文件夹。
将数据分成70%的训练数据,30%的验证数据。
指定增强操作的训练图像进行。数据增强有助于防止网络过度拟合和记忆训练图像的具体细节。对于这个例子,适用于x轴的随机旋转从范围[-90,90]度的随机反射,并从范围[1,2]的随机重新缩放。
请点击进口以将数据导入到深层网络设计者。
重新训练SqueezeNet进行分类的新图片,替换最后2-d卷积层和网络的最终分类层。在SqueezeNet,这些层有名字'conv10'
和'ClassificationLayer_predictions'
, 分别。
在设计师窗格中,将一个新的convolutional2dLayer
到画布上。以匹配原始卷积层,集FilterSize
至1,1
。编辑NumFilters
是类数在新的数据,在这个例子中,五
。
改变学习率,这样的学习是在新的层比在转移层更快地通过设置组WeightLearnRateFactor
和BiasLearnRateFactor
10。
删除最后2 d卷积层和连接新层代替。
更换输出层。滚动到年底图层库并拖动新classificationLayer
到画布上。删除原始输出层并在其位置连接新层。
要选择培训选项,选择训练选项卡并单击培训选项。组InitialLearnRate
为较小的值,以减缓在被转印层学习。在前面的步骤中,增加了学习速率因子2-d卷积层以加快在新的最终层的学习。学习率设置的结果只有在新的层次快速学习,并在其他层慢学习的组合。
在这个例子中,集InitialLearnRate
至0.0001
,ValidationFrequency
至五
,MaxEpochs
至8
。由于有55层的意见,集MiniBatchSize
以11均匀地分割训练数据和保证整个数据集的每个历元期间使用。
与指定的培训选择训练网络,点击关然后单击培养。
深网设计可以让你可视化和监控训练进度。然后,您可以编辑的培训方案和再培训的网络,如果需要的话。
若要从训练导出结果,在训练选项卡,选中导出>导出训练的网络和结果。深层网络设计者出口训练有素的网络变量trainedNetwork_1
而作为变量培训信息trainInfoStruct_1
。
您还可以生成MATLAB代码,它再现了网络使用的训练方案。在训练选项卡,选中导出>生成代码培训。检查MATLAB代码,以了解如何以编程准备数据进行训练,建立网络架构,并培训网络。
加载一个新的形象使用经训练的网络进行分类。
I = imread(“MerchDataTest.jpg”);
调整测试图像以匹配网络的输入大小。
I = imresize(I,[227 227]);
用训练网络分类的测试图像。
[YPred,probs] =分类(trainedNetwork_1,I);imshow(I)标记= YPred;标题(字符串(标签)+“”+ num2str(100 *最大(probs),3)+“%”);
[1] Krizhevsky,亚历,伊利亚Sutskever,和Geoffrey E.欣顿。“ImageNet分类与深卷积神经网络。”在神经信息处理系统的进步。2012。
[2]BVLC AlexNet型号。https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet
深层网络设计师|squeezenet
|trainNetwork
|trainingOptions