这个例子展示了如何创建一个自定义的He权重初始化函数卷积层,然后泄漏的ReLU层。
卷积层的初始化器随后是泄漏的Relu层,来自正常分布的样本,零均值和方差
, 在哪里一个泄漏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);结束
何凯明,张向宇,任少青,孙健。深入研究整流器:在图像网分类上超越人类水平的表现。在IEEE计算机愿景国际会议的诉讼程序, 1026 - 1034页。2015.