主要内容

使用AlexNet转移学习

此示例显示了如何微调预折叠的亚历纳特卷积神经网络,以对新的图像集合进行分类。

AlexNet已培训超过一百万只图像,可以将图像分类为1000个对象类别(例如键盘,咖啡杯,铅笔和许多动物)。该网络已经学习了丰富的特征表示,以获得各种图像。该网络将图像作为输入,将图像中的对象的标签与每个对象类别的概率一起输出。

迁移学习通常用于深度学习应用。你可以用一个预先训练好的网络作为学习新任务的起点。用迁移学习对网络进行微调通常比用随机初始化权值从头开始训练网络更快、更容易。您可以使用少量的训练图像快速地将学习到的特征转移到新的任务中。

加载数据

解压缩并将新图像加载为图像数据存储。imageageAtastore.根据文件夹名称自动标记图像并将数据存储为ImageDatastore对象。图像数据存储使您能够存储大的图像数据,包括内存中不适合的数据,并在卷积神经网络训练期间有效地读取批量图像。

解压缩('merchdata.zip');imds = imageageatastore(“MerchData”...'insertumbfolders',真的,...'labelsource'“foldernames”);

将数据划分为培训和验证数据集。使用70%的图像进行培训和30%的验证。splitEachLabel分裂的图片数据存储到两个新的数据存储中。

[IMDStrain,IMDSValidation] = SpliteachLabel(IMDS,0.7,'随机');

这一非常小的数据设置现在包含55个训练图像和20个验证图像。显示一些样本图像。

numtrainimages = numel(imdstrain.labels);idx = randperm(numtrainimages,16);数字i = 1:16 subplot(4,4,i) i = readimage(imdsTrain,idx(i));imshow(我)结束

负载净化网络

加载普里雷普雷雷亚历克特神经网络。如果是深度学习工具箱™模型对于AlexNet网络未安装,则该软件提供下载链接。AlexNet接受了超过100万幅图像的训练,可以将图像分为1000个对象类别,如键盘、鼠标、铅笔和许多动物。因此,该模型学习了丰富的特征表示范围广泛的图像。

net = alexnet;

分析显示网络架构的交互式可视化和关于网络层的详细信息。

分析(净)

第一层,图像输入层,需要输入尺寸为227 × 227 × 3的图像,其中3是彩色通道的数量。

InputSize = Net.Layers(1).InputSize
InputSize =.1×3227 227 3

取代最后一层

普里普雷德网络的最后三层配置为1000类。这三层必须进行微调,以获得新的分类问题。从佩带的网络中提取除最后三个之外的所有图层。

layersTransfer = net.Layers (1: end-3);

通过用完全连接层、软最大层和分类输出层替换最后三层,将层转移到新的分类任务。根据新数据指定新的完全连接层的选项。将完全连接层设置为与新数据中的类数量相同的大小。要想在新的层次上比在转移的层次上学得更快,就要增加WeightLearnRateFactorBiaslearnratefactor.完全连接层的值。

numclasses = numel(类别(imdstrain.labels))
numClasses = 5
图层= [TALERSTRANSFER全连接层(NUMCLASS,'wexerlearnratefactor', 20岁,“BiasLearnRateFactor”, 20) softmaxLayer classificationLayer];

列车网络的

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

PIXELRANGE = [-30 30];imageaugmenter = imagedataAugmenter(...'randxreflection',真的,...'randxtranslation'pixelRange,...'randytranslation',pixelrange);Augimdstrain = AugmentedimageGedataStore(Inputsize(1:2),IMDstrain,...“DataAugmentation”,imageaugmender);

要自动调整验证图像的大小而不执行进一步的数据增强,请使用增强图像数据存储,而无需指定任何其他预处理操作。

augimdsValidation = augmentedImageDatastore (inputSize (1:2), imdsValidation);

指定培训选项。对于转移学习,将特征与预磨料网络的早期层保持(转移的层重量)保持。为了减慢转移层的学习,将初始学习率设置为小值。在上一步中,您可以增加完全连接层的学习率因子,以加速新的最终层的学习。这种学习速率设置的组合只会在新层次中快速学习,并在其他层中的学习较慢。在进行转移学习时,您不需要为尽可能多的时期训练。epoch是整个培训数据集的完整培训周期。指定迷你批量大小和验证数据。该软件每个都验证网络ValidationFrequency迭代在训练。

选项=培训选项('sgdm'...“MiniBatchSize”10...“MaxEpochs”,6,...'italllearnrate'1的军医,...'洗牌''每个时代'...'vightationdata',augimdsvalidation,...'验证职业',3,...'verbose',错误的,...“阴谋”“训练进步”);

训练由传输层和新层组成的网络。默认情况下,Trainnetwork.如果一个可用的GPU,则使用GPU,否则,它使用CPU。GPU培训需要并行计算工具箱™和支持的GPU设备。金宝app有关支持设备的信息,请参阅金宝appGPU通金宝app过发布支持(并行计算工具箱).属性也可以指定执行环境“ExecutionEnvironment”名称 - 值对参数培训选项

netTransfer = trainNetwork (augimdsTrain层,选项);

验证图像进行分类

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

[ypred,scores] =分类(nettransfer,augimdsvalidation);

显示四个样本验证图像与他们的预测标签。

idx = randperm(numel(imdsvalidation.files),4);数字i = 1:4子图(2,2,i)i = ReadImage(IMDSValidation,IDX(I));imshow(i)标签= ypred(idx(i));标题(字符串(标签));结束

计算验证集的分类准确性。准确性是网络正确预测的标签的分数。

yvalidation = imdsvalidation.labels;精度=均值(ypred == yvalidation)
精度= 1

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

参考

[1] Krizhevsky, Alex, Ilya Sutskever和Geoffrey E. Hinton。基于深度卷积神经网络的图像网络分类神经信息处理系统的进展.2012.

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

另请参阅

|||

相关话题