主要内容

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

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

卷积层和泄漏ReLU层的He初始化式来自于均值和方差为零的正态分布 σ 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初始化器给出的权重数组,后面是一个泄漏的ReLU层。

inputSize = [28 28 1];numClasses = 10;图层= [imageInputLayer(inputSize)]卷积2dlayer (3,8,“WeightsInitializer”@leakyHe) leakyReluLayer convolution2dLayer(3, 16岁,“WeightsInitializer”32岁的@leakyHe) leakyReluLayer convolution2dLayer (3“WeightsInitializer”,@leakyHe) leakyReluLayer fullconnectedlayer (numClasses) softmaxLayer classificationLayer];

列车网络的

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

默认情况下,trainNetwork如果有,使用GPU,否则使用CPU。GPU上的培训需要并行计算工具箱™和支持的GPU设备。金宝app有关支持的设备的信息,请参见金宝app不同版本金宝app的GPU支持(并行计算工具箱).方法还可以指定执行环境“ExecutionEnvironment”的名称-值对参数trainingOptions

maxEpochs = 4;miniBatchSize = 128;numObservations =元素个数(imdsTrain.Files);numIterationsPerEpoch = floor(numObservations / 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(inputSize)]卷积2dlayer (3,8,“WeightsInitializer”,@(sz) leakyReluLayer(scale)卷积2dlayer (3,16,“WeightsInitializer”,@(sz) leakyReluLayer(scale)卷积2dlayer (3,32,“WeightsInitializer”,@(sz) leakyHe(sz,scale)) leakyReluLayer(scale) fullconnectedlayer (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) = [];

对于每个网络,根据验证精度绘制epoch号。

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

自定义权重初始化命令功能

leakyHe函数接受输入深圳(层权重的大小),并返回由卷积层的He初始化器给出的权重数组,后面是一个泄漏的ReLU层。该函数还接受可选的输入参数规模它指定了漏电ReLU层的放大倍数。

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

参考书目

  1. 何凯明,张翔宇,任少清,孙健。“深入研究整流器:在图像网络分类方面超越人类水平的表现”在IEEE计算机视觉国际会议论文集, 1026 - 1034页。2015.

另请参阅

|

相关的话题