主要内容

alexnet

卷积神经网络

描述

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

您可以使用分类要使用AlexNet网络对新图像进行分类,请执行的步骤使用googlenet对图像进行分类用AlexNet取代GoogLeNet。

对于自由实践的实践深度学习方法,见深度学习斜坡弯道

例子

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

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

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

= AlexNet('权重',“imagenet”返回在ImageNet数据集上训练的AlexNet网络。此语法相当于网= alexnet

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

例子

全部折叠

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

类型alexnet在命令行。

alexnet

如果是深度学习工具箱模型AlexNet网络金宝app如果没有安装支持包,则该函数将提供到Add-On Explorer中所需的支持包的链接。要安装支持包,请单击链接,然后金宝app单击安装.通过键入检查安装是否成功alexnet在命令行。

alexnet
ANS =具有属性的级系列网络:图层:[25×1 nnet.cnn.layer.Layer]

如果安装了所需的支持包,则该函数金宝app返回aSeriesNetwork对象。

使用Deep network Designer可视化网络。

DeepNetworkDesigner(亚历谢)

探索其他预先训练的网络在深度网络设计师通过点击新的

如果您需要下载网络,那么单击安装以打开附加组件资源管理器。

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

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

迁移学习通常用于深度学习应用。你可以把一个预先训练好的网络作为学习新任务的起点。使用转移学习对网络进行微调通常比从头开始使用随机初始化权重训练网络要快得多,也容易得多。您可以使用较少数量的训练图像将学习到的功能快速传输到新任务。

加载数据

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

解压(“MerchData.zip”);imd = imageDatastore (“MerchData”...'insertumbfolders',真的,...'labelsource'“foldernames”);

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

[imdsTrain, imdsValidation] = splitEachLabel (imd, 0.7,'随机');

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

numTrainImages =元素个数(imdsTrain.Labels);idx = randperm (numTrainImages 16);数字i = 1:16 subplot(4,4,i) i = readimage(imdsTrain,idx(i));imshow(我)结束

负载Pretrained网络

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

网= alexnet;

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

分析(净)

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

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

替换最终图层

预训练网络的最后三层为1000个类配置。这三层必须针对新的分类问题进行微调。从预先训练的网络中提取除最后三层外的所有层。

LayerTransfer=净层数(1:end-3);

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

numClasses=numel(类别(imdsTrain.Labels))
numClasses = 5
layers = [layertransfer fulllyconnectedlayer (numClasses,“WeightLearnRateFactor”20,“BiasLearnRateFactor”, 20) softmaxLayer classificationLayer];

列车网络的

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

PIXELRANGE = [-30 30];imageaugmenter = imagedataAugmenter(...“RandXReflection”,真的,...“RandXTranslation”,像素范围,...“RandYTranslation”, pixelRange);augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain,...“DataAugmentation”, imageAugmenter);

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

augimdsValidation=增强图像数据存储(inputSize(1:2),imdsValidation);

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

选项=培训选项(“个”...“MiniBatchSize”,10,...'maxepochs'6...“InitialLearnRate”,1e-4,...“洗牌”'每个时代'...'vightationdata'augimdsValidation,...'验证职业',3,...“详细”,错误的,...“阴谋”“培训进度”);

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

nettransfer = trainnetwork(augimdstrain,图层,选项);

验证图像进行分类

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

[YPred,得分]=分类(净转移,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模型。

网= alexnet;

使用以下命令读取图像Imread.

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

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

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

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

i = imresize(i,sz(1:2));图imshow(i)

使用分类

标签=分类(净,I)
标签=分类灯笼椒

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

图imshow(我)标题(标签)

此示例显示了如何从预折叠的卷积神经网络中提取学习的图像特征,并使用这些功能培训图像分类器。特征提取是使用预先使用的深网络代表性的最简单且最快的方法。例如,您可以使用支持向量机(SVM)使用金宝appfitcecoc.(统计和机器学习工具箱)™) 由于特征提取只需要对数据进行一次遍历,因此如果没有GPU来加速网络训练,这是一个很好的起点。

加载数据

解压示例图像并将其加载为图像数据存储。imageDatastore自动标签的图像基于文件夹名称和存储数据作为ImageDatastore对象。图像数据存储允许存储大的图像数据,包括内存中不合适的数据。将数据分成70%的训练数据和30%的测试数据。

解压(“MerchData.zip”);imd = imageDatastore (“MerchData”...'insertumbfolders',真的,...'labelsource'“foldernames”);[imdsTrain, imdsTest] = splitEachLabel (imd, 0.7,'随机');

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

numimagestain = numel(imdstrain.labels);Idx = Randperm(NumimageStrain,16);i=1:16 i{i}=readimage(imdsTrain,idx(i));结束图imshow (imtile(我))

负载Pretrained网络

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

网= alexnet;

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

网。层
ans=25x1层阵列,带层:1“数据”图像输入227x227x3图像,带“零中心”标准化2“conv1”卷积96 11x11x3卷积,带跨距[4]和填充[0]3“relu1”ReLU ReLU 4“norm1”跨通道规格化跨通道规格化每个元素5个通道5“pool1”最大池3x3最大池带跨步[2]和填充[0 0 0 0]6“conv2”分组卷积2组128个5x5x48卷积带跨步[1]和填充[2 2 2 2 2]7“relu2”ReLU ReLU 8“norm2”跨通道规格化跨通道规格化每个元素5个通道9“pool2”最大池3x3最大池带跨步[2]和填充[0 0 0 0]10“conv3”卷积384 3x256卷积带跨步[1]和填充[1 1 1 1 1]11“relu3”ReLU ReLU 12“conv4”分组卷积2组192 3x3x192卷积带跨步[11]和填充[11]13“relu4”ReLU ReLU ReLU 14“conv5”分组卷积2组128 3x3x192卷积带跨步[11]和填充[11]15“relu5”ReLU ReLU 16“pool5”最大池3x3最大池带跨步[2]和填充[0 0 0 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”分类输出交叉入口投影带“tench”及其他类别

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

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

提取图像特征

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

网络需要大小为227 × 227 × 3的输入图像,但图像数据存储中的图像大小不同。要在将训练和测试图像输入到网络之前自动调整其大小,请创建扩展的图像数据存储,指定所需的图像大小,并使用这些数据存储作为输入参数激活

augimdsTrain=augmentedImageDatastore(inputSize(1:2),imdsTrain);augimdtest=augmentedImageDatastore(inputSize(1:2),imdsTest);层=“fc7”;特征应变=激活(净、螺旋应变、层、,'outputas'“行”); featuresTest=激活(净、模拟测试、层、,'outputas'“行”);

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

YTrain = imdsTrain.Labels;欧美= imdsTest.Labels;

Fit图像分类器

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

mdl=fitcecoc(特征菌株,YTrain);

分类测试映像

使用培训的SVM模型和从测试图像中提取的功能进行分类测试图像。

featuresTest YPred =预测(mdl);

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

Idx = [1 5 10 15];数字i=1:numel(idx)子批次(2,2,i)i=readimage(imdsTest,idx(i));label=YPred(idx(i));imshow(i)title(label)结束

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

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

这种SVM精度高。如果使用特征提取足够高的精度不足,则尝试转移学习。

输出参数

全部折叠

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

未经训练的AlexNet卷积神经网络结构,作为一个数组中。

提示

参考文献

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

邓杰,苏海峰,等。ImageNet大型视觉识别挑战国际计算机视觉杂志(IJCV). 第115卷,2015年第3期,第211-252页

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

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

扩展能力

介绍了R2017a