主要内容

alexnet

AlexNet卷积神经网络

  • AlexNet网络架构

描述

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

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

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

例子

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

此功能需要深度学习工具箱™模型用于AlexNet网络金宝app支持包。如果未安装该支持金宝app包,则提供下载链接。另外,看到深度学习工具箱模型用于AlexNet网络

有关MATLAB中更多预训练的网络,请参见预训练的深度神经网络

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

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

例子

全部折叠

下载并安装深度学习工具箱模型用于AlexNet网络金宝app支持包。

类型alexnet在命令行。

alexnet

如果深度学习工具箱模型用于AlexNet网络金宝app支持包未安装,则该函数在外接程序资源管理器中提供到所需支持包的链接。要安装支持包,请单击链接,然后金宝app单击安装.通过输入检查安装是否成功alexnet在命令行。

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

如果安装了所需的支持包,则函数返金宝app回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 fullyConnectedLayer(numClasses,“WeightLearnRateFactor”, 20岁,“BiasLearnRateFactor”,20) softmaxLayer classificationLayer];

列车网络的

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

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

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

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

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

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

训练由转移层和新层组成的网络。默认情况下,trainNetwork如果有GPU,则使用GPU,否则使用CPU。在GPU上进行训练需要并行计算工具箱™和受支持的GPU设备。金宝app有关受支持设备的信息,请参见金宝appGPU支金宝app持版本(并行计算工具箱).属性指定执行环境“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;accuracy = mean(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(我)

对图像进行分类分类

分类(net,I)
标签=分类甜椒

同时显示图像和分类结果。

图imshow(I) title(label)

这个例子展示了如何从预训练的卷积神经网络中提取学习到的图像特征,并使用这些特征来训练图像分类器。特征提取是使用预训练深度网络的表示能力的最简单和最快的方法。例如,您可以使用训练支持向量机(SVM)金宝appfitcecoc(统计和机器学习工具箱™)对提取的特征。因为特征提取只需要通过数据一次,如果你没有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网络金宝app支持包未安装时,则软件提供下载链接。AlexNet对超过100万张图像进行了训练,可以将图像分为1000个对象类别。例如,键盘、鼠标、铅笔和许多动物。因此,该模型已经学习了广泛图像的丰富特征表示。

Net = alexnet;

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

网层
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'最大池化3x3最大池化与stride[2 2]和填充[0 000 0]17 'fc6'全连接4096全连接层18 'relu6' ReLU ReLU 19 'drop6' 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 = imdsTest.Labels;

拟合图像分类器

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

mdl = fitcecoc(featuresTrain,YTrain);

分类测试图像

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

YPred = predict(mdl, featurest);

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

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

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

accuracy = mean(YPred == YTest)
准确度= 1

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

输出参数

全部折叠

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

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

提示

参考文献

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

[2]卢萨可夫斯基,O.,邓J.,苏H.,等。ImageNet大规模视觉识别挑战赛国际计算机视觉杂志(IJCV).115卷,第3期,2015年,第211-252页

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

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

扩展功能

在R2017a中引入