主要内容

比较激活层

这个例子展示了如何比较的准确性与ReLU训练网络,漏水的ReLU ELU,时髦的激活层。

培训深入学习神经网络需要使用非线性激活函数如ReLU和时髦的操作。一些激活层可以产生更好的训练性能为代价的额外的计算时间。训练神经网络时,你可以试着使用不同的活化层是否培训提高。

这个例子展示了如何比较验证准确性的训练SqueezeNet神经网络使用ReLU时,漏ReLU ELU或时髦的激活层给定一组验证的图像。

加载数据

下载花数据集。

url =“http://download.tensorflow.org/example_images/flower_photos.tgz”;downloadFolder = tempdir;文件名= fullfile (downloadFolder,“flower_dataset.tgz”);dataFolder = fullfile (downloadFolder,“flower_photos”);如果~存在(dataFolder“dir”)流(“花下载数据集(218 MB)…”)websave(文件名,url);解压(文件名,downloadFolder)流(“完成。\ n”)结束

准备培训资料

加载数据作为一个图像数据存储使用imageDatastore功能和指定包含图像数据的文件夹。

imd = imageDatastore (dataFolder,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);

视图类的培训数据的数量。

numClasses =元素个数(类别(imds.Labels))
numClasses = 5

划分训练集的数据存储,这样每个类别有80%的图片和验证组剩下的图像从每个标签。

[imdsTrain, imdsValidation] = splitEachLabel (imd, 0.80,“随机”);

指定增加选项并创建一个包含训练图像的增强图像数据存储。

  • 随机反映图像在水平轴上。

  • 随机图像高达20%。

  • 随机旋转45度的图像。

  • 随机翻译3像素的图像。

  • 调整网络的图像输入的大小(227 - 227)。

imageAugmenter = imageDataAugmenter (“RandXReflection”,真的,“RandScale”(0.8 - 1.2),“RandRotation”(-45年,45岁),“RandXTranslation”3 [3],“RandYTranslation”3 [3]);augimdsTrain = augmentedImageDatastore (imdsTrain (227 227),“DataAugmentation”,imageAugmenter);

创建一个增强图像数据存储的验证数据调整图像的大小与输入网络的大小。不适用其他图像转换验证数据。

augimdsValidation = augmentedImageDatastore ([227 - 227], imdsValidation);

创建自定义绘图函数

当训练多个网络,为每个网络监控验证精度在同一轴上,您可以使用OutputFcn训练选项,指定一个函数,更新的情节提供培训信息。

创建一个函数,训练过程提供的信息结构和更新一个动画线条图。的updatePlot函数,列出的绘图函数部分的示例中,以结构的信息作为输入和更新指定的动画。

指定培训选项

指定培训选项:

  • 火车使用mini-batch大小128 60时代。

  • 每个时代洗牌的数据。

  • 每个时代验证神经网络一次使用了验证集。

miniBatchSize = 128;numObservationsTrain =元素个数(imdsTrain.Files);numIterationsPerEpoch =地板(numObservationsTrain / miniBatchSize);选择= trainingOptions (“亚当”,“MiniBatchSize”miniBatchSize,“MaxEpochs”现年60岁的“洗牌”,“every-epoch”,“ValidationData”augimdsValidation,“ValidationFrequency”numIterationsPerEpoch,“详细”、假);

训练神经网络

为每个激活层types-ReLU漏水的ReLU, ELU, swish-train SqueezeNet网络。

指定类型的激活层。

activationLayerTypes = [“relu”“leaky-relu”“elu”“漂亮”];

初始化定制的培训进展情节通过创建动画线条与颜色规定colororder函数。

图颜色= colororder;i = 1:元素个数(activationLayerTypes) (i) = animatedline (“颜色”、颜色(我,:));结束ylim(100[0])传说(activationLayerTypes,“位置”,“东南”);包含(“迭代”)ylabel (“准确性”)标题(“验证准确性”网格)

遍历每个激活层类型和训练神经网络。为每个激活层类型:

  • 创建一个函数处理activationLayer创建激活层。

  • 创建一个新的SqueezeNet网络没有重量和替代激活层(ReLU层)层活化层的类型使用函数处理activationLayer

  • 取代的最后卷积层神经网络与一个指定类型的输入数据的数量。

  • 通过设置更新验证准确性阴谋OutputFcn培训选择对象的属性函数处理代表updatePlot函数与相对应的动画线激活层类型。

  • 训练时间和网络使用trainNetwork函数。

i = 1:元素个数(activationLayerTypes) activationLayerType = activationLayerTypes(我);%确定激活层类型。开关activationLayerType情况下“relu”activationLayer = @reluLayer;情况下“leaky-relu”activationLayer = @leakyReluLayer;情况下“elu”activationLayer = @eluLayer;情况下“漂亮”activationLayer = @swishLayer;结束%创建SqueezeNet层图。lgraph = squeezenet (“重量”,“没有”);%替代活化层。如果activationLayerType ~ =“relu”层= lgraph.Layers;j = 1:元素个数(层)如果isa(层(j),“nnet.cnn.layer.ReLULayer”)layerName =层(j) . name;层= activationLayer (“名字”activationLayerType +“_new_”+ j);lgraph = replaceLayer (lgraph、layerName层);结束结束结束%在最后卷积层指定数量的类。层= convolution2dLayer (numClasses [1],“名字”,“conv10”);lgraph = replaceLayer (lgraph,“conv10”层);%指定自定义绘制函数。选项。OutputFcn = @(信息)updatePlot(信息,(i)行);%训练网络。开始=抽搐;(净{我},信息{我}]= trainNetwork (augimdsTrain、lgraph选项);运行(i) = toc(开始);结束

可视化培训次条形图。

图酒吧(分类(activationLayerTypes),运行)标题(“培训时间”)ylabel (“时间(秒)”)

在这种情况下,使用不同的激活层收益率最终验证精度相似,破ReLU和时髦的层有较高的值。使用漂亮的激活层允许在更少的迭代收敛性。相比其他激活层,使用ELU层使验证在更多的迭代收敛精度,需要更多的计算时间。

绘图函数

updatePlot函数作为输入的信息结构信息并更新验证指定的情节动画

函数updatePlot(信息、线)如果~ isempty (info.ValidationAccuracy) addpoints(线,info.Iteration, info.ValidationAccuracy);drawnowlimitrate结束结束

另请参阅

||||

相关的话题