将学习使用AlexNet
这个例子显示了如何调整pretrained AlexNet卷积神经网络进行分类的新图片的集合。
AlexNet已经在超过一百万个图像和训练可以分类图像到1000年对象类别(如键盘、咖啡杯、铅笔,和许多动物)。网络已经学会丰富广泛的图像特征表示。网络需要一个图像作为输入和输出图像中对象的标签一起为每个对象的类别的概率。
在深度学习应用程序转移学习是常用的。pretrained网络,可以使用它作为一个起点,学习一个新任务。微调网络转移学习通常比训练一个网络快得多,也更容易与随机初始化权重从零开始。您可以快速学习功能转移到一个新的任务使用较少的训练图像。
加载数据
解压缩和加载新的图像作为图像数据存储。imageDatastore
自动标签图像基于文件夹的名字和存储数据作为ImageDatastore
对象。图像数据存储可以存储大量图像数据,包括数据,并不适合在内存中,有效地阅读批图像卷积神经网络在训练。
解压缩(“MerchData.zip”);imd = imageDatastore (“MerchData”,…“IncludeSubfolders”,真的,…“LabelSource”,“foldernames”);
将数据分为训练和验证数据集。使用70%的图片,培训为30%,验证。splitEachLabel
分裂的图片
数据存储到两个新的数据存储。
[imdsTrain, imdsValidation] = splitEachLabel (imd, 0.7,“随机”);
这个非常小的数据集包含55训练图像和20验证图像。显示一些示例图像。
numTrainImages =元素个数(imdsTrain.Labels);idx = randperm (numTrainImages 16);图为i = 1:16次要情节(4 4 i) i = readimage (imdsTrain idx (i));imshow(我)结束
负载Pretrained网络
加载pretrained AlexNet神经网络。如果深入学习工具箱™模型AlexNet网络没有安装,那么软件提供一个下载链接。AlexNet培训超过一百万张图片,可以分类图像到1000年对象类别,如键盘,鼠标,铅笔,和许多动物。结果,模型已经学会丰富广泛的图像特征表示。
网= alexnet;
使用analyzeNetwork
显示一个交互式可视化的网络体系结构和网络层的详细信息。
analyzeNetwork(净)
图像输入层,第一层要求输入的图像大小227 - 227 - 3,3是颜色通道的数量。
.InputSize inputSize = net.Layers (1)
inputSize =1×3227 227 3
取代最后一层
的最后三层pretrained网络净
配置为1000类。这些三层必须调整为新分类问题。提取所有层,除了最后三,从pretrained网络。
layersTransfer = net.Layers (1: end-3);
层转移到新的分类任务代替最后三层完全连接层,softmax层和输出层分类。指定的选项完全连接层根据新的数据。设置完全连接层相同的大小在新数据类的数量。更快地学习在新的层比传输层,增加WeightLearnRateFactor
和BiasLearnRateFactor
完全连接层的值。
numClasses =元素个数(类别(imdsTrain.Labels))
numClasses = 5
层= [layersTransfer fullyConnectedLayer (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);
指定培训选项。转移学习,防止功能的早期层pretrained网络(传输层的重量)。放慢学习的传输层,设置初始学习速率小值。在前面的步骤中,您增加了学习速率因子完全连接层加快学习在新的最后一层。这种组合的学习速率设置导致快速学习只有在新的层和慢学习其他层。当执行转移学习,你不需要训练尽可能多的时代。一个时代是一个完整的培训周期在整个训练数据集。指定mini-batch大小和验证数据。软件验证网络的每一个ValidationFrequency
迭代在训练。
选择= trainingOptions (“个”,…“MiniBatchSize”10…“MaxEpochs”6…“InitialLearnRate”1的军医,…“洗牌”,“every-epoch”,…“ValidationData”augimdsValidation,…“ValidationFrequency”3,…“详细”假的,…“阴谋”,“训练进步”);
训练网络,包括转移和新层。默认情况下,trainNetwork
使用GPU如果是可用的,否则,它使用一个CPU。培训在GPU需要并行计算工具箱™和支持GPU设备。金宝app支持设备的信息,请参阅金宝appGPU计算的需求(并行计算工具箱)。您还可以指定使用的执行环境“ExecutionEnvironment”
名称-值对的观点trainingOptions
。
netTransfer = trainNetwork (augimdsTrain层,选项);
验证图像进行分类
使用调整网络验证图像进行分类。
[YPred,分数]= (netTransfer augimdsValidation)进行分类;
显示四个样本验证图像预测标签。
idx = randperm(元素个数(imdsValidation.Files), 4);图为i = 1:4次要情节(2,2,我)我= readimage (imdsValidation idx (i));imshow(我)标签= YPred (idx (I));标题(字符串(标签));结束
计算上的分类精度验证集。精度是标签的一部分网络预测正确。
YValidation = imdsValidation.Labels;精度=意味着(YPred = = YValidation)
精度= 1
在提高分类精度的建议,见深度学习技巧和窍门。
引用
[1]Krizhevsky,亚历克斯,Ilya Sutskever和杰弗里·e·辛顿。“ImageNet与深卷积神经网络分类。”先进的神经信息处理系统。2012年。
[2]BVLC AlexNet模型。https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet
另请参阅
trainNetwork
|trainingOptions
|alexnet
|analyzeNetwork