主要内容

指定自定义权重初始化函数

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

卷积层的He初始化器和泄漏的ReLU层从均值和方差为零的正态分布中采样 σ 2 2 1 + 一个 2 n ,在那里一个ReLU泄漏层的规模是跟随卷积层和n = FilterSize (1) * FilterSize (2) * NumChannels

对于可学习层,当设置选项时“WeightsInititializer”“InputWeightsInitializer”,或“RecurrentWeightsInitializer”“他”,该软件使用一个= 0.设置一个对于不同的值,创建一个自定义函数作为权重初始化器使用。

加载数据

加载数字样本数据作为图像数据存储。的imageDatastore函数根据文件夹名称自动标记图像。

digitDatasetPath = fullfile (matlabroot,“工具箱”“nnet”“nndemos”...“nndatasets”“DigitDataset”);imd = imageDatastore (digitDatasetPath,...“IncludeSubfolders”,真的,...“LabelSource”“foldernames”);

将数据划分为训练数据集和验证数据集,使训练集中的每个类别包含750幅图像,验证集包含每个标签的剩余图像。splitEachLabel将数据存储分割为两个新的数据存储,用于培训和验证。

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

定义网络体系结构

定义卷积神经网络架构:

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

  • 三个二维卷积层,分别带有大小为3、8、16和32个滤波器

  • 每个卷积层后面都有一个泄漏的ReLU层

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

  • Softmax层

  • 分类层

对于每个卷积层,将权值初始化器设置为leakyHe函数。的leakyHe函数,列在示例的最后,接受输入深圳(层权值的大小),并返回一个由He Initializer给出的权值数组,该数组由卷积层的He Initializer和一个有漏洞的ReLU层组成。

inputSize = [28 28 1];numClasses = 10;imageInputLayer = [imageInputLayer(inputSize)]“WeightsInitializer”@leakyHe) leakyReluLayer convolution2dLayer(3, 16岁,“WeightsInitializer”32岁的@leakyHe) leakyReluLayer convolution2dLayer (3“WeightsInitializer”,@ leakyReluLayer fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer];

列车网络的

指定培训选项并对网络进行培训。为四个时代而训练。为了防止渐变发生爆炸,设置渐变阈值为2。每个epoch验证一次网络。查看训练进度图。

默认情况下,trainNetwork如果GPU可用,则使用GPU,否则使用CPU。GPU上的培训需要并行计算工具箱™和支持的GPU设备。万博1manbetx有关支持的设备的信息,请参见万博1manbetxGPU支万博1manbetx持情况(并行计算工具箱).属性也可以指定执行环境“ExecutionEnvironment”的名称-值对参数trainingOptions

maxEpochs = 4;miniBatchSize = 128;numObservations =元素个数(imdsTrain.Files);numIterationsPerEpoch = floor(nummobations / miniBatchSize);选择= trainingOptions (“个”...“MaxEpochs”maxEpochs,...“MiniBatchSize”miniBatchSize,...“GradientThreshold”2,...“ValidationData”imdsValidation,...“ValidationFrequency”numIterationsPerEpoch,...“详细”假的,...“阴谋”“训练进步”);[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 = [imageInputLayer(inputSize)]“WeightsInitializer”,@(sz) leakyReluLayer(sz,scale) leakyReluLayer(scale) convolution2dLayer(3,16,)“WeightsInitializer”,@(sz) leakyReluLayer(sz,scale) leakyReluLayer(scale) convolution2dLayer(3,32,)“WeightsInitializer”,@(sz) leakyHe(sz,scale) leakyReluLayer(scale) fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer];[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) = [];

对于每个网络,根据验证精度绘制历元数。

图epochs = 0:maxEpochs;情节(时代,validationAccuracy)标题(“验证准确性”)包含(“时代”) ylabel (“验证准确性”)传说([“他漏(默认)”“他漏(自定义)”],“位置”“东南”

自定义权重初始化函数

leakyHe函数接受输入深圳(层权值的大小),并返回一个由He Initializer给出的权值数组,该数组由卷积层的He Initializer和一个有漏洞的ReLU层组成。该函数还接受可选的输入参数规模为漏出的ReLU层指定缩放倍增器。

函数重量= leakyHe(深圳、规模)%如果没有指定,则使用默认比例= 0.1如果Nargin < 2 scale = 0.1;结束filterSize = [sz(1) sz(2)];numChannels =深圳(3);numIn = filterSize(1) * filterSize(2) * numChannels;varWeights = 2 / ((1 + scale^2) * numIn);= sz * sqrt(varWeights);结束

参考书目

  1. 何开明,张翔宇,任少青,孙健。《深入整流器:在图像网分类上超越人类水平的表现》在计算机视觉国际会议论文集, 1026 - 1034页。2015.

另请参阅

|

相关的话题