迁移学习通过对预训练网络进行微调,使深度学习模型能在少量数据下快速适应新任务,类似于“举一反三”,而不需要从头训练。本文使用matlab自带的深度网络设计器,可以便捷地修改预训练网络进行迁移学习,通过对预训练网络的最后一层进行解锁,调高学习率,使新层中的学习速度快于迁移层的学习速度,即可输入新数据,完成迁移学习的训练。
在实际工程应用中,构建并训练一个大规模的卷积神经网络是比较复杂的,需要大量的数据以及高性能的硬件。迁移学习则是“另辟蹊径”,将训练好的典型的网络稍加改进,用少量的数据进行训练并加以应用,将一个预先训练好的网络作为学习新任务的起点。利用迁移学习对网络进行微调,通常比从头开始训练一个随机初始化权重的网络要快得多、容易得多。使用较少数量的训练图像,就能将学习到的特征快速迁移到新任务中。
1.使用的数据
本文使用的数据集为 MathWorks Merch 数据集,这是包含 75 幅 MathWorks 商品图像的小型数据集,这些商品分属五个不同类(瓶盖、魔方、扑克牌、螺丝刀和手电筒)。数据的排列使得图像位于对应于这五个类的子文件夹中。
folderName = "MerchData";
unzip("MerchData.zip",folderName);
创建一个图像数据存储(Datastore),通过图像数据存储可以存储大图像数据集合,包括无法放入内存的数据,并在神经网络的训练过程中高效分批读取图像。对图像文件夹建立子文件夹,使用imageDatastore,可以将子文件夹名称转换为图像标签。
imds = imageDatastore(folderName, ...
IncludeSubfolders=true, ...
LabelSource="foldernames");
显示一些示例图像:
numImages = numel(imds.Labels);
idx = randperm(numImages,16);
I = imtile(imds,Frames=idx);
figure
imshow(I)
2.提取数据
提取类名称和类数目:
class