alexnet

AlexNet卷积神经网络

描述

AlexNet是卷积神经网络是深8层。您可以从ImageNet数据库加载培训了超过一万张图片的网络的预训练版本[1]。这个预先训练好的网络可以将图像分成1000个对象类别,比如键盘、鼠标、铅笔和许多动物。因此,该网络学会了丰富的特征表示,为广泛的图像。该网络的图像输入大小为227 * 227。用于MATLAB中更多的预训练网络®预先训练的深度神经网络

您可以使用分类使用AlexNet网络对新图像进行分类。遵循以下步骤使用GoogLeNet对图像进行分类与AlexNet取代GoogLeNet。

有关实际深度学习方法的免费实践介绍,请参阅深度学习匝道

= alexnet返回一个在ImageNet数据集上训练的AlexNet网络。

此功能需要深度学习工具箱™模式对于AlexNet网络万博1manbetx支持包。如果未安装此支持万博1manbetx包,该功能提供了下载链接。另外,看深度学习工具箱模型对于AlexNet网络

对于MATLAB更多的预训练的网络,看预先训练的深度神经网络

= alexnet(“权重”,'imagenet'返回一个在ImageNet数据集上训练的AlexNet网络净= alexnet

= alexnet(“权重”,'没有'返回未经训练的AlexNet网络架构。未受过训练的模式不要求支持包。万博1manbetx

例子

全部收缩

下载并安装深度学习工具箱模型对于AlexNet网络万博1manbetx支持包。

类型alexnet在命令行。

alexnet

如果深度学习工具箱型号对于AlexNet网络万博1manbetx支持包没有安装,那么函数提供了附加在资源管理器链接到所需的支持包。要安装支持包,点击链接,然后点万博1manbetx击安装。通过键入检查安装是否成功alexnet在命令行。

alexnet
ans = SeriesNetwork with properties: Layers:[25×1 nnet.cn .layer. layer]

如果安装了所需的支持包,则该函数万博1manbetx返回SeriesNetwork宾语。

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

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

在深度学习应用中,迁移学习是一种常用的学习方法。你可以把一个预先训练好的网络作为学习新任务的起点。与从零开始使用随机初始化的权值训练网络相比,使用转移学习对网络进行微调通常要快得多,也容易得多。您可以使用较少的训练图像将学到的特性快速转移到新任务中。

数据加载

解压缩并将新图像作为图像数据存储加载。imageDatastore标签自动根据文件夹名称和图像存储的数据作为ImageDatastore宾语。图像数据存储使您能够存储大量的图像数据,包括不适合在内存中,卷积神经网络的训练过程中有效地读取图像数据批次。

解压缩('MerchData.zip');IMDS = imageDatastore('MerchData'...“IncludeSubfolders”,真的,...“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网络没有安装,那么该软件提供了下载链接。AlexNet训练上超过一个百万的图像,并可以将图像分为1000个对象的类别,如键盘,鼠标,笔,和许多动物。其结果是,该模型已经学会了丰富的功能表示为各种图像。

净= alexnet;

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

analyzeNetwork(净)

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

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

取代最后一层

预训练网络的最后三层被构造成用于1000级的类。这三层必须进行微调,新的分类问题。提取所有层,除了最后三个,从预训练网络。

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

通过与完全连接层,SOFTMAX层,和一个分类输出层将最后三个层转移层,以将新的分类任务。根据新的数据指定新的完全连接层的选项。设置完全连接层具有的尺寸的类新数据的数量相同。要了解在新的图层快于传输层,增加WeightLearnRateFactorBiasLearnRateFactor在完全连接层的值。

numClasses =元素个数(类别(imdsTrain.Labels))
numClasses = 5
层= [layersTransfer fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20岁,“BiasLearnRateFactor”,20)softmaxLayer classificationLayer];

列车网络

网络需要大小227逐227×3的输入图像,但在图像数据存储这些图像具有不同的大小。使用增强的图像数据存储到自动调整训练图像。指定附加增强操作,以在训练图像进行:随机地翻转训练图像沿着垂直轴,并随机起来水平地和垂直平移30个像素。数据增强有助于防止网络过度拟合和记忆训练图像的具体细节。

pixelRange = [- 3030];imageAugmenter = imageDataAugmenter (...'RandXReflection',真的,...'RandXTranslation'pixelRange,...'RandYTranslation',pixelRange);augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain,...'DataAugmentation',imageAugmenter);

自动调整,而不执行进一步的数据扩充的验证图像,使用的增强图像数据存储区,而无需指定任何附加的预处理操作。

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

指定培训选项。对于转移学习,保留预先训练的网络的早期层的特征(转移的层权重)。为了在转换层中减慢学习速度,可以将初始学习速率设置为一个小的值。在前面的步骤中,您增加了全连接层的学习速率因子,以加速新最终层的学习。这种学习速率设置的组合只在新层中产生快速学习,而在其他层中产生较慢的学习。当进行迁移学习时,你不需要训练很多个时代。epoch是整个训练数据集的完整训练周期。指定小批量大小和验证数据。软件每隔一段时间验证一次网络ValidationFrequency培训期间迭代。

选择= trainingOptions ('SGDM'...“MiniBatchSize”10...“MaxEpochs”,6,...'InitialLearnRate'1的军医,...“洗牌”“every-epoch”...“ValidationData”,augimdsValidation,...“ValidationFrequency”,3,...“放牧”假的,...“情节”“训练进步”);

训练由传送层和新层组成的网络。默认情况下,trainNetwork使用GPU(如果可用)(需要并行计算工具箱™和启用CUDA®GPU计算能力3.0或更高版本)。否则,它使用一个CPU。您也可以通过指定执行环境“执行环境”的名-值对参数trainingOptions

netTransfer = trainNetwork (augimdsTrain层,选项);

分类验证图片

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

[YPred,分数]= (netTransfer augimdsValidation)进行分类;

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

idx = randperm(元素个数(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

有关提高分类精度的技巧,请参阅深度学习技巧和窍门

阅读,调整大小,并使用AlexNet分类的图像。首先,加载预训练AlexNet模型。

净= alexnet;

阅读使用图像imread

I = imread('peppers.png');图imshow(I)

预训练的模型要求的图像尺寸是相同网络的输入大小。确定使用的网络的输入大小InputSize网络第一层的属性。

深圳= net.Layers (1) .InputSize
SZ =1×3227 227 3

裁剪图像到网络的输入大小。或者,您可以使用以下选项调整图像的大小imresize

I = I(1:SZ(1),1:SZ(2),1:SZ(3));图imshow(I)

使用以下方法对图像进行分类分类

标签=分类(净,我)
标签=明确的甜椒

显示图像和分类结果在一起。

图imshow(I)标题(标签)

这个例子展示了如何从一个预先训练好的卷积神经网络中提取学习到的图像特征,并使用这些特征来训练一个图像分类器。特征提取是利用预先训练的深度网络的表征能力的最简单、最快速的方法。例如,您可以使用以下命令来训练支持向量机(SVM)万博1manbetxfitcecoc(统计和机器学习工具箱™)中提取的特征。因为特征提取只需要对数据进行一次遍历,所以如果没有GPU来加速网络训练,这是一个很好的起点。

数据加载

解压缩并将示例图像作为图像数据存储加载。imageDatastore标签自动根据文件夹名称和图像存储的数据作为ImageDatastore宾语。图像数据存储可以存储海量的图像数据,包括不适合在内存中的数据。拆分数据转换成70%的培训和30%的测试数据。

解压缩('MerchData.zip');IMDS = imageDatastore('MerchData'...“IncludeSubfolders”,真的,...“LabelSource”“foldernames”);[imdsTrain,imdsTest] = splitEachLabel(IMDS,0.7%,“随机”);

现在在这个非常小的数据集中有55个训练图像和20个验证图像。显示一些样本图像。

numImagesTrain =元素个数(imdsTrain.Labels);idx = randperm (numImagesTrain 16);对于i = 1:16 i {i} = readimage(imdsTrain,idx(i));结束图imshow(imtile(I))

加载预训练网络

加载预训练AlexNet网络。如果深度学习工具箱型号对于AlexNet网络万博1manbetx支持包未安装,则软件提供下载链接。AlexNet对超过一百万张图像进行训练,可以将图像分成1000个对象类别。例如,键盘、鼠标、铅笔和许多动物。其结果是,该模型已经学会了丰富的功能表示为各种图像。

净= alexnet;

显示网络架构。该网络有5个卷积层和3个全连接层。

net.Layers
ans = 25x1层数组与层:227 x227x3数据的图像输入图像的zerocenter正常化2 conv1卷积96年11 x11x3旋转步[4 4]和填充[0 0 0 0]3‘relu1 ReLU ReLU 4 norm1的横通道正常化横通道正常化与5频道/元素5“pool1”马克斯池3 x3马克斯池步(2 - 2)和填充[0 0 0 0]6“conv2”分组卷积2组128 5 x5x48旋转步[1]和填充(2 2 2 2)7的relu2 ReLU ReLU 8 norm2交叉道标准化交叉道正常化与5频道/元素9“pool2”马克斯池3 x3马克斯池步[2 2]和填充[0 0 0 0]10 conv3卷积384 3 x3x256旋转步[1]和填充[1 1 1 1]11的relu3 ReLU ReLU 12“conv4”分组卷积2组192 3 x3x192旋转步[1]和填充[1 1 1 1]13的relu4 ReLU ReLU 14“conv5”分组卷积2组128 3 x3x192旋转步[1]和填充(1 1 1)15‘relu5 ReLU ReLU 16“pool5”马克斯池3 x3 Max池步(2 - 2)和填充[0 0 0 0]17 fc6完全连接4096完全连接层18“relu6”ReLU ReLU 19“drop6”辍学50%辍学20“fc7”完全连接4096完全连接层21 ' relu7 ReLU ReLU 22“drop7”辍学50%辍学23 fc8完全连接1000完全连接层24“概率”Softmax Softmax 25“输出”分类输出crossentropyex“鲤鱼”和999其他的类

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

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

提取图像特征

网络构建的输入图像的分层表示。更深的层包含前面层的更高级别的功能,使用较低级的构造特征。要获得的培训和测试图像,使用该功能的表示激活在完全连接层上“fc7”。要获得较低层的图像表示,请使用网络中较早的层。

网络需要大小227逐227×3的输入图像,但在图像数据存储这些图像具有不同的大小。自动调整的训练和测试图像它们被输入到网络之前,创建增强图像数据存储中,指定期望的图像的尺寸,并使用这些数据存储作为输入参数激活

augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain);augimdsTest = augmentedImageDatastore (inputSize (1:2), imdsTest);层=“fc7”;featuresTrain =激活(净、augimdsTrain层,“OutputAs”“行”);featuresTest =激活(净、augimdsTest层,“OutputAs”“行”);

从提取的训练和测试数据的类标签。

YTrain = imdsTrain.Labels;YTest = imdsTest.Labels;

适合图像分类器

使用从所述训练图像作为预测变量使用提取的特征和适合多类别支持向量机(SVM)万博1manbetxfitcecoc(统计和机器学习工具箱)。

mdl = fitcecoc (featuresTrain YTrain);

测试图像进行分类

使用训练后的SVM模型对测试图像进行分类,并从测试图像中提取特征。

YPred =预测(MDL,featuresTest);

显示与它们的预测的标签的四个采样的测试图像。

IDX = [1 5 10 15];数字对于i = 1:numel(idx) subplot(2,2,i) i = readimage(imdsTest,idx(i));标签= YPred (idx (i));imshow (I)标题(标签)结束

在测试集上计算分类精度。精度是网络正确预测的标签的比例。

精度=平均值(YPred == YTest)
精度= 1

该SVM具有较高的准确率。如果使用特征提取的准确率不够高,可以尝试转移学习。

输出参数

全部收缩

预处理的AlexNet卷积神经网络,返回为aSeriesNetwork宾语。

未经训练的AlexNet卷积神经网络结构,返回为阵列。

提示

参考

[1]ImageNet。http://www.image-net.org

[2] Russakovsky,O.,邓,J.,苏,H。等人。“ImageNet大型视觉识别的挑战。”国际计算机视觉杂志(IJCV)。第115卷,2015年第3期,第211-252页

[3] Krizhevsky,亚历克斯,伊利亚Sutskever,和Geoffrey E.欣顿。“ImageNet分类与深卷积神经网络。”在神经信息处理系统的进步。2012.

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

扩展功能

介绍了在R2017a