主要内容

使用AlexNet转移学习

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

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

转移学习通常用于深入学习应用。您可以拍摄备用网络并将其用作学习新任务的起点。微调具有传输学习的网络通常比训练网络从头开始随机初始化的权重更快更容易。您可以使用较少数量的培训图像快速将学习功能转移到新任务。

加载数据

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

解压缩('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子图(4,4,i)i = ReadImage(IMDstrain,IDX(I));imshow(i)结尾

负载净化网络

加载普里雷普雷雷亚历克特神经网络。如果是深度学习工具箱™模型对于AlexNet网络未安装,然后软件提供下载链接。AlexNet培训超过一百万图像,可以将图像分为1000个对象类别,例如键盘,鼠标,铅笔和许多动物。因此,该模型已经学习了丰富的特征表示,以获得各种图像。

net = alexnet;

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

分析(净)

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

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

替换最终图层

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

Layerstransfer = Net.Layers(1:END-3);

通过用完全连接的图层,Softmax层和分类输出层替换最后三层来将图层传送到新的分类任务。根据新数据指定新的完全连接图层的选项。将完全连接的图层设置为具有与新数据中的类的数量相同的大小。在新层中学习比转移层更快,增加了举重Biaslearnratefactor.完全连接层的值。

numclasses = numel(类别(imdstrain.labels))
numclasses = 5
图层= [TALERSTRANSFER全连接层(NUMCLASS,'wexerlearnratefactor'20,'biaslearnratefactor',20)SoftmaxLayer分类层];

火车网络

该网络需要输入大小227-×227-3的图像,但图像数据存储中的图像具有不同的大小。使用增强图像数据存储来自动调整培训图像的大小。指定额外的增强操作以在训练图像上执行:随机翻转沿垂直轴的训练图像,并随机将其水平和垂直多达30个像素转换。数据增强有助于防止网络过度接收和记忆培训图像的确切细节。

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

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

augimdsvalidation = augmentedimagedataStore(输入(1:2),IMDSValidation);

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

选项=培训选项('sgdm'......'minibatchsize'10,......'maxepochs',6,......'italllearnrate',1e-4,......'洗牌''每个时代'......'vightationdata',augimdsvalidation,......'验证职业',3,......'verbose',错误的,......'plots''培训 - 进步');

培训由转移和新层组成的网络。默认情况下,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.

也可以看看

|||

相关话题