主要内容

指定自定义权重初始化功能

这个例子展示了如何创建一个自定义的He权重初始化函数卷积层,然后泄漏的ReLU层。

卷积层的初始化器随后是泄漏的Relu层,来自正常分布的样本,零均值和方差 σ. 2 2 1 + 一个 2 n , 在哪里一个泄漏ReLU层的规模跟随卷积层和n = FilterSize(1) * FilterSize(2) * NumChannels

对于可学习的层,在设置选项时“WeightsInititializer”“InputWeightsInitializer”,或'经常性重量初始化器''他',软件使用a = 0.。设置一个到不同的值,创建一个自定义函数用作权重初始化程序。

加载数据

将数字样例数据加载为图像数据存储。的imageageAtastore.功能自动标签的图像基于文件夹名称。

digitDatasetPath = fullfile (matlabroot,'工具箱''nnet'“nndemos”...'nndatasets''digitdataset');imds = imageageataStore(DigitDatasetPath,...'insertumbfolders',真的,...'labelsource'“foldernames”);

将数据划分为训练数据集和验证数据集,训练集中的每个类别包含750张图像,验证集中包含每个标签的剩余图像。splitEachLabel将数据存储分成两个新数据存储,以进行培训和验证。

numtrainfiles = 750;[IMDStrain,IMDSValidation] = SpliteachLabel(IMDS,NumTrainfiles,“随机”);

定义网络体系结构

定义卷积神经网络架构:

  • 图像输入层大小[28 28 1],输入图像的大小

  • 具有过滤器尺寸3的三个2-D卷积层,分别有8,16和32个过滤器

  • 在每个卷积层之后有一个泄漏的ReLU层

  • 全连通层的大小为10,类数

  • Softmax层

  • 分类层

对于每个卷积层,将权重初始化程序设置为leakyHe函数。的leakyHe函数,列在示例的末尾,取消输入深圳(层权值的大小),并返回一个由He Initializer为卷积层给出的权值数组,然后是一个泄漏的ReLU层。

inputSize = [28 28 1];numClasses = 10;[imageInputLayer(inputSize)]卷积2dlayer (3,8,'掌控itializer'@leakyHe) leakyReluLayer convolution2dLayer(3, 16岁,'掌控itializer',@泄漏)Leaceryrulayer Convolution2dlayer(3,32,'掌控itializer',@泄漏)Leaceryrelayer全连接列(NumClasses)SoftmaxLayer分类层];

列车网络的

指定培训选项并培训网络。为四个时代而训练。为了防止梯度爆炸,设置梯度阈值为2。每个纪元验证一次网络。查看培训进度图。

默认,Trainnetwork.如果一个可用的GPU,则使用GPU,否则,它使用CPU。GPU培训需要并行计算工具箱™和支持的GPU设备。金宝app有关支持设备的信息,请参阅金宝appGPU通金宝app过发布支持(并行计算工具箱)。属性指定执行环境“ExecutionEnvironment”名称 - 值对参数培训选项

maxepochs = 4;minibatchsize = 128;numobservations = numel(imdstrain.files);numiterationsperepoch = bloor(numobservations / minibatchsize);选项=培训选项('sgdm'...“MaxEpochs”maxEpochs,...“MiniBatchSize”,小匹马,...'gradientthreshold'2,...'vightationdata'imdsValidation,...'验证职业',numiterationsperepoch,...'verbose',错误的,...“阴谋”“训练进步”);[netdefault,Infodefault] = Trainnetwork(IMDstrain,图层,选项);

测试网络

分类验证数据并计算分类准确性。

YPred =分类(netDefault imdsValidation);YValidation = imdsValidation.Labels;准确度=平均值(YPred == YValidation)
精度= 0.9684

指定附加选项

leakyHe函数接受可选的输入参数规模。若要向自定义权重初始化函数中输入额外的变量,请将该函数指定为接受单个输入的匿名函数深圳。为此,更换实例@Leakyhe.@(深圳)leakyHe(深圳、规模)。在这里,匿名函数接受单个输入参数深圳只有和调用leakyHe函数,并指定规模输入参数。

创建和培训与之前相同的网络,并进行以下更改:

  • 对于泄漏的ReLU层,指定0.01的比例倍增器。

  • 用初始化卷积层的重量leakyHe功能并指定比例乘法器。

规模= 0.01;[imageInputLayer(inputSize)]卷积2dlayer (3,8,'掌控itializer',@(sz) leakyHe(sz,scale)) leakyReluLayer(scale) convolution2dLayer(3,16,'掌控itializer',@(SZ)漏液(SZ,SCAL))漏滤网(秤)卷积2DLayer(3,32,'掌控itializer',@(sz) leakyHe(sz,scale)) leakyReluLayer(scale) full connectedlayer (numClasses) softmaxLayer classiationlayer];[netCustom, infoCustom] = trainNetwork (imdsTrain层,选项);

分类验证数据并计算分类准确性。

ypred =对(netcustom,imdsvalidation)进行分类;YValidation = imdsValidation.Labels;准确度=平均值(YPred == YValidation)
精度= 0.9456

比较结果

从来自信息结构的输出中提取验证精度Trainnetwork.函数。

validationAccuracy = [infoDefault.ValidationAccuracy;infoCustom.ValidationAccuracy];

验证精度的向量包含对于未计算验证准确性的迭代。去除那个值。

idx =所有(isnan (validationAccuracy));validationAccuracy (:, idx) = [];

对于每个网络,请绘制验证准确性的时代数。

figure epochs = 0:maxEpochs;情节(时代,validationAccuracy)标题(“验证准确性”)xlabel(“时代”)ylabel(“验证准确性”) 传奇([“他漏(默认)”“泄露他(定制)”],'地点''东南'

自定义重量初始化功能

leakyHe函数接受输入深圳(层权值的大小),并返回一个由He Initializer为卷积层给出的权值数组,然后是一个泄漏的ReLU层。该函数还接受可选的输入参数规模这指定了泄漏的Relu层的比例乘法器。

功能权重=漏频(SZ,SCAL)%如果未指定,则使用默认标度= 0.1如果nargin <2 scale = 0.1;结束filterSize = [sz(1) sz(2)];numChannels =深圳(3);numIn = filterSize(1) * filterSize(2) * numChannels;varWeights = 2 /((1 +缩放^2)* numIn);weight = randn(sz) * sqrt(varWeights);结束

参考书目

  1. 何凯明,张向宇,任少青,孙健。深入研究整流器:在图像网分类上超越人类水平的表现。在IEEE计算机愿景国际会议的诉讼程序, 1026 - 1034页。2015.

另请参阅

|

相关话题