主要内容

alexnet

AlexNet卷积神经网络

  • AlexNet网络架构

描述

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

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

有关实用深度学习方法的免费实践介绍,请参见深度学习入口

例子

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

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

要了解更多的MATLAB预训练网络,请参见预训练深度神经网络

= alexnet(“权重”,“imagenet”返回一个经过ImageNet数据集训练的AlexNet网络。这种语法等价于网络

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

例子

全部折叠

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

类型alexnet在命令行。

alexnet

如果深度学习工具箱模型为AlexNet网络万博1manbetxsupport包未安装,则该功能将在Add-On资源管理器中提供到所需支持包的链接。如果需要安装支持包,请单击链接万博1manbetx,然后单击安装.输入命令检查安装是否成功alexnet在命令行。

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

如果安装了所需的支持包,则函数返万博1manbetx回一个SeriesNetwork对象。

使用深度网络设计器可视化网络。

deepNetworkDesigner (alexnet)

通过单击在深度网络设计器中探索其他预先训练的网络

深度网络设计器开始页显示可用的预训练网络

如果需要下载某个网络,请在该网络上暂停,然后单击安装打开附加组件资源管理器。

这个例子展示了如何微调预先训练的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 subplot(4,4,i) i = readimage(imdsTrain,idx(i));imshow(我)结束

负载预训练网络

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

Net = 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层和一个分类输出层替换最后三个层,将这些层转移到新的分类任务。根据新的数据指定新的全连接层的选项。将完全连接层设置为与新数据中的类数量相同的大小。若要在新层中比在已传输层中学习得更快,请增加WeightLearnRateFactor而且BiasLearnRateFactor全连通层的值。

numClasses = numel(categories(imdsTrain.Labels))
numClasses = 5
layers = [layersTransfer fulllyconnectedlayer (numClasses,“WeightLearnRateFactor”, 20岁,“BiasLearnRateFactor”,20) softmaxLayer classificationLayer];

列车网络的

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

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

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

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

指定培训选项。对于转移学习,保留预训练网络早期层的特征(转移层权值)。为了降低迁移层的学习速度,可以将初始学习率设置为较小的值。在前面的步骤中,您增加了全连接层的学习率因子,以加快新的最终层中的学习。这种学习率设置的组合导致只在新层中实现快速学习,而在其他层中实现较慢学习。在执行迁移学习时,您不需要训练那么多课时。一个epoch是整个训练数据集上的一个完整的训练周期。指定小批大小和验证数据。该软件每天验证网络ValidationFrequency培训期间的迭代。

options = trainingOptions(“个”...“MiniBatchSize”10...“MaxEpochs”6...“InitialLearnRate”1的军医,...“洗牌”“every-epoch”...“ValidationData”augimdsValidation,...“ValidationFrequency”3,...“详细”假的,...“阴谋”“训练进步”);

训练由传输层和新层组成的网络。默认情况下,trainNetwork如果有GPU就使用GPU,否则就使用CPU。GPU培训需要并行计算工具箱™和支持的GPU设备。万博1manbetx有关支持的设备的信息,请参见万博1manbetxGPU支万博1manbetx持按版本划分(并行计算工具箱).方法还可以指定执行环境“ExecutionEnvironment”的名值对参数trainingOptions

netTransfer = trainNetwork(augimdsTrain,layers,options);

对验证图像进行分类

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

[YPred,scores] = category (netTransfer,augimdsValidation);

显示四个带有预测标签的样本验证图像。

idx = randperm(numel(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

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

使用AlexNet读取、调整大小并对图像进行分类。首先,加载一个预先训练好的AlexNet模型。

Net = alexnet;

使用imread

I = imread(“peppers.png”);图imshow(我)

预训练模型要求图像的大小与网络的输入大小一致。方法确定网络的输入大小InputSize网络第一层的属性。

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

将图像大小调整为网络的输入大小。

I = imresize(I,sz(1:2));图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 = numel(imdsTrain.Labels);idx = randperm(numImagesTrain,16);i = 1:16 i {i} = readimage(imdsTrain,idx(i));结束图imshow (imtile(我))

负载预训练网络

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

Net = alexnet;

显示网络架构。该网络有五个卷积层和三个完全连接层。

网层
带有图层的图层数组: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' Max Pooling 3x3 Max Pooling with stride [2 2] and padding [0 000] 17 'fc6'全连接4096全连接层18 'relu6' ReLU ReLU 19 'drop6' Dropout 50% Dropout 20 'fc7'全连接4096全连接层21 'relu7' ReLU ReLU 22 'drop7' Dropout 50% Dropout 23 'fc8'全连接1000全连接层24 'prob' Softmax Softmax 25 'output'分类输出crossentropyex与'tench'和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 =激活(net,augimdsTrain,layer,“OutputAs”“行”);featuresTest =激活(net,augimdsTest,layer,“OutputAs”“行”);

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

YTrain = imdsTrain.Labels;YTest = imdste . labels;

适合图像分类器

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

mdl = fitcecoc(featuresTrain,YTrain);

对测试图像进行分类

利用训练好的支持向量机模型和从测试图像中提取的特征对测试图像进行分类。

YPred = predict(mdl,featuresTest);

显示四个带有预测标签的样本测试图像。

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

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

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

该支持向量机具有较高的精度。如果使用特征提取的准确率不够高,那么可以尝试迁移学习。

输出参数

全部折叠

预训练的AlexNet卷积神经网络,返回为SeriesNetwork对象。

未经训练的AlexNet卷积神经网络结构,返回为数组中。

提示

参考文献

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

[2]罗萨可夫斯基,邓杰,苏H,等。"ImageNet大规模视觉识别挑战"国际计算机视觉杂志.2015年第3期,第211-252页

Krizhevsky, Alex, Ilya Sutskever和Geoffrey E. Hinton。用深度卷积神经网络对ImageNet进行分类。神经信息处理系统的进展.2012.

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

扩展功能

在R2017a中介绍