主要内容

使用AlexNet进行迁移学习

这个例子展示了如何微调一个预先训练的AlexNet卷积神经网络来对一个新的图像集合进行分类。

AlexNet已经对超过100万张图片进行了训练,并可以将图片分类为1000个对象类别(如键盘、咖啡杯、铅笔和许多动物)。该网络学习了丰富的特征表示范围广泛的图像。该网络以一幅图像作为输入,输出图像中对象的标签以及每个对象类别的概率。

迁移学习通常用于深度学习应用。你可以把一个预先训练好的网络作为学习新任务的起点。使用转移学习对网络进行微调通常比从头开始使用随机初始化权重训练网络要快得多,也容易得多。您可以使用较少数量的训练图像将学习到的功能快速传输到新任务。

加载数据

将新图像解压并作为图像数据存储加载。imageDatastore自动标签的图像基于文件夹名称和存储数据作为图像数据存储对象。图像数据存储使您能够存储大型图像数据,包括内存中不适合的数据,并在卷积神经网络训练期间高效地读取图像批次。

解压(“MerchData.zip”);imd = imageDatastore (“水星”,...“IncludeSubfolders”是的,...“LabelSource”,“foldernames”);

将数据分为训练数据集和验证数据集。使用70%的图像进行训练,30%的图像进行验证。拆分标签分裂图片将数据存储到两个新的数据存储中。

[imdsTrain, imdsValidation] = splitEachLabel (imd, 0.7,“随机”);

这个非常小的数据集现在包含55张训练图像和20张验证图像。显示一些示例图像。

numTrainImages =元素个数(imdsTrain.Labels);idx = randperm (numTrainImages 16);数字对于i=1:16子批次(4,4,i)i=readimage(imdsTrain,idx(i));imshow(i)结束

负载Pretrained网络

加载预先训练的AlexNet神经网络。深度学习工具箱™模型AlexNet网络如果未安装,则软件提供下载链接。AlexNet接受了超过一百万张图像的训练,可以将图像分为1000个对象类别,如键盘、鼠标、铅笔和许多动物。因此,该模型学习了大量图像的丰富特征表示。

网= alexnet;

使用analyzeNetwork显示网络架构的交互式可视化和有关网络层的详细信息。

analyzeNetwork(净)

第一层,即图像输入层,需要大小为227×227×3的输入图像,其中3是颜色通道的数量。

.InputSize inputSize = net.Layers (1)
inputSize =1×3227 227 3

替换最后一层

预训练网络的最后三层为1000个类配置。这三层必须针对新的分类问题进行微调。从预先训练的网络中提取除最后三层外的所有层。

LayerTransfer=净层数(1:end-3);

通过将最后三层替换为完全连接层、softmax层和分类输出层,将层转移到新分类任务。根据新数据指定新完全连接层的选项。将完全连接层设置为与新数据中的类数相同的大小。要学习n新层中的速度快于传输层中的速度,增加加权比率因子BiasLearnRateFactor完全连接层的值。

numClasses=numel(类别(imdsTrain.Labels))
numclass=5
layers = [layertransfer fulllyconnectedlayer (numClasses,“WeightLearnRateFactor”,20,“BiasLearnRateFactor”,20)softmaxLayer分类层];

列车网络

网络需要大小为227×227×3的输入图像,但图像数据存储中的图像大小不同。使用增强图像数据存储自动调整训练图像的大小。指定要在训练图像上执行的其他增强操作:沿垂直轴随机翻转训练图像,并在水平和垂直方向上随机平移最多30个像素。数据扩充有助于防止网络过度拟合和记忆训练图像的确切细节。

pixelRange = [-30 30];imageAugmenter = imageDataAugmenter (...“RandXReflection”是的,...“RandXTranslation”,像素范围,...“RandYTranslation”, pixelRange);augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain,...“数据增强”图像增强仪);

若要自动调整验证图像的大小而不执行进一步的数据扩展,请使用扩展后的图像数据存储,而不指定任何额外的预处理操作。

augimdsValidation=增强图像数据存储(inputSize(1:2),imdsValidation);

指定培训选项。对于迁移学习,保留预先训练网络的早期层的特征(迁移层权值)。为了降低传输层的学习速度,将初始学习率设置为一个较小的值。在前面的步骤中,您增加了完全连接层的学习率因素,以加速新的最后层的学习。这种学习率设置的组合只会导致在新层中学习快,而在其他层中学习慢。当进行迁移学习时,你不需要训练那么多的纪元。epoch是整个训练数据集上的一个完整的训练周期。指定小批量大小和验证数据。软件每次都要对网络进行验证验证频率训练期间的迭代。

选择= trainingOptions (“个”,...“MiniBatchSize”,10,...“MaxEpochs”6...“InitialLearnRate”,1e-4,...“洗牌”,“every-epoch”,...“ValidationData”augimdsValidation,...“ValidationFrequency”3,...“详细”假的,...“情节”,“培训进度”);

培训由转移层和新层组成的网络。默认情况下,trainNetwork如果GPU可用,则使用GPU,否则使用CPU。GPU上的培训需要并行计算工具箱™和支持的GPU设备。万博1manbetx有关支持的设备的信息,请参见万博1manbetxGPU支万博1manbetx持情况(并行计算工具箱). 您还可以使用“执行环境”的名称-值对参数trainingOptions

netTransfer=列车网络(augimdsTrain、层、选项);

对验证图像进行分类

使用微调网络对验证图像进行分类。

[YPred,得分]=分类(净转移,augimdsValidation);

显示四个样本验证图像及其预测标签。

idx = randperm(元素个数(imdsValidation.Files), 4);数字对于i = 1:4 subplot(2,2,i) i = readimage(imdsValidation,idx(i));imshow(I) label = YPred(idx(I));标题(字符串(标签));结束

计算验证集上的分类精度。准确率是网络正确预测标签的比例。

YValidation = imdsValidation.Labels;精度=平均值(YPred == YValidation)
精度= 1

有关提高分类准确性的提示,请参阅深度学习技巧

参考文献

[1] 克里哲夫斯基、亚历克斯、伊利亚·萨茨基和杰弗里·E·辛顿。“使用深度卷积神经网络进行图像网络分类。”神经信息处理系统的进展. 2012

[2]BVLC-AlexNet模型.https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet

另见

|||

相关的话题