我是靠谱客的博主 大胆手链,最近开发中收集的这篇文章主要介绍matlab初始化权重,比较层权重初始化函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

加载数据

加载日语元音数据集。XTrain 是包含 270 个不同长度序列的元胞数组,特征维数为 12。Y 是标签 1、2、...、9 的分类向量。XTrain 中的条目是具有 12 行(每个特征一行)和不同列数(每个时间步一列)的矩阵。

[XTrain,YTrain] = japaneseVowelsTrainData;

[XValidation,YValidation] = japaneseVowelsTestData;

指定网络架构

指定网络架构。对于每个初始化函数,使用相同的网络架构。

将输入大小指定为 12(输入数据的特征数量)。指定具有 100 个隐含单元的 LSTM 层,并输出序列的最后一个元素。最后,通过包含大小为 9 的全连接层,后跟 softmax 层和分类层,来指定九个类。

numFeatures = 12;

numHiddenUnits = 100;

numClasses = 9;

layers = [ ...

sequenceInputLayer(numFeatures)

lstmLayer(numHiddenUnits,'OutputMode','last')

fullyConnectedLayer(numClasses)

softmaxLayer

classificationLayer]

layers =

5x1 Layer array with layers:

1 '' Sequence Input Sequence input with 12 dimensions

2 '' LSTM LSTM with 100 hidden units

3 '' Fully Connected 9 fully connected layer

4 '' Softmax softmax

5 '' Classification Output crossentropyex

训练选项

指定训练选项。对于每个初始化函数,使用相同的训练选项来训练网络。

maxEpochs = 30;

miniBatchSize = 27;

numObservations = numel(XTrain);

numIterationsPerEpoch = floor(numObservations / miniBatchSize);

options = trainingOptions('adam', ...

'ExecutionEnvironment','cpu', ...

'MaxEpochs',maxEpochs, ...

'MiniBatchSize',miniBatchSize, ...

'GradientThreshold',2, ...

'ValidationData',{XValidation,YValidation}, ...

'ValidationFrequency',numIterationsPerEpoch, ...

'Verbose',false, ...

'Plots','training-progress');

Glorot 初始化函数

指定在示例前面部分列出的网络架构,并将 LSTM 层的输入权重初始化函数和全连接层的权重初始化函数设置为 'glorot'。

layers = [ ...

sequenceInputLayer(numFeatures)

lstmLayer(numHiddenUnits,'OutputMode','last','InputWeightsInitializer','glorot')

fullyConnectedLayer(numClasses,'WeightsInitializer','glorot')

softmaxLayer

classificationLayer];

使用具有 Glorot 权重初始化函数的层来训练网络。

[netGlorot,infoGlorot] = trainNetwork(XTrain,YTrain,layers,options);

784e452a81184862b24b1aedff38b7e5.png

He 初始化函数

指定在示例前面部分列出的网络架构,并将 LSTM 层的输入权重初始化函数和全连接层的权重初始化函数设置为 'he'。

layers = [ ...

sequenceInputLayer(numFeatures)

lstmLayer(numHiddenUnits,'OutputMode','last','InputWeightsInitializer','he')

fullyConnectedLayer(numClasses,'WeightsInitializer','he')

softmaxLayer

classificationLayer];

使用具有 He 权重初始化函数的层来训练网络。

[netHe,infoHe] = trainNetwork(XTrain,YTrain,layers,options);

786885478ae372a493f953c5995cc094.png

窄正态初始化函数

指定在示例前面部分列出的网络架构,并将 LSTM 层的输入权重初始化函数和全连接层的权重初始化函数设置为 'narrow-normal'。

layers = [ ...

sequenceInputLayer(numFeatures)

lstmLayer(numHiddenUnits,'OutputMode','last','InputWeightsInitializer','narrow-normal')

fullyConnectedLayer(numClasses,'WeightsInitializer','narrow-normal')

softmaxLayer

classificationLayer];

使用具有窄正态权重初始化函数的层来训练网络。

[netNarrowNormal,infoNarrowNormal] = trainNetwork(XTrain,YTrain,layers,options);

3ac557bba119a726515c3619ba43a1ea.png

绘制结果

从 trainNetwork 函数的信息结构体输出中提取验证准确度。

validationAccuracy = [

infoGlorot.ValidationAccuracy;

infoHe.ValidationAccuracy;

infoNarrowNormal.ValidationAccuracy];

对于未计算验证准确度的迭代,验证准确度向量包含 NaN。删除 NaN 值。

idx = all(isnan(validationAccuracy));

validationAccuracy(:,idx) = [];

对于每个初始化函数,绘制轮次编号对验证准确度的图。

figure

epochs = 0:maxEpochs;

plot(epochs,validationAccuracy)

title("Validation Accuracy")

xlabel("Epoch")

ylabel("Validation Accuracy")

legend(["Glorot" "He" "Narrow-Normal"],'Location','southeast')

774c89c074d0c502cabf8e7829ca6c98.png

该图显示了不同初始化函数的整体效果,以及每个初始化函数的训练收敛速度。

参考书目

Glorot, Xavier, and Yoshua Bengio."Understanding the difficulty of training deep feedforward neural networks."In Proceedings of the thirteenth international conference on artificial intelligence and statistics, pp. 249-256. 2010.

He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun."Delving deep into rectifiers:Surpassing human-level performance on imagenet classification."In Proceedings of the IEEE international conference on computer vision, pp. 1026-1034. 2015.

最后

以上就是大胆手链为你收集整理的matlab初始化权重,比较层权重初始化函数的全部内容,希望文章能够帮你解决matlab初始化权重,比较层权重初始化函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部