概述
加载数据
加载日语元音数据集。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);
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);
窄正态初始化函数
指定在示例前面部分列出的网络架构,并将 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);
绘制结果
从 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')
该图显示了不同初始化函数的整体效果,以及每个初始化函数的训练收敛速度。
参考书目
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初始化权重,比较层权重初始化函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复