主要内容

LSTM投影层列车网络

训练具有LSTM投影层的深度学习网络,用于序列到标签的分类。

要压缩一个深度学习网络,可以使用预计层.该层引入了可学习的投影矩阵 它取代了形式的乘法 W x ,在那里 W 有乘法运算的矩阵是可学习的吗 W x ,和商店 而且 W W 而不是存储 W .当 项目 x 在较低的维空间中,这通常需要更少的内存来存储可学习参数,并具有同样强的预测精度。

通过投影LSTM层而不是减少LSTM层的隐藏单元的数量来减少可学习参数的数量,可以保持该层的输出大小,进而保持下游层的大小,从而可以获得更好的预测精度。

这些图表比较了LSTM网络和本例中训练的LSTM网络的测试精度和可学习参数的数量。

comparison.png

本例首先训练一个LSTM网络进行序列分类,然后训练一个具有LSTM投影层的等价网络,并比较每个网络的测试精度和可学习参数的数量。

负荷训练数据

按照[1]和[2]中描述的方式加载日语元音数据集。XTrain是包含270个不同长度序列的单元阵列,有12个特征对应于LPC倒谱系数。TTrain是标签1,2,…,9的分类向量。的条目XTrain矩阵有12行(一行表示每个特征)和不同数量的列(一列表示每个时间步)。

[XTrain, TTrain] = japaneseVowelsTrainData;

在一个情节中想象第一个时间序列。每一行对应一个特征。

图绘制(XTrain{1}”)标题(“训练观察1”) numFeatures = size(XTrain{1},1);传奇(“特性”+字符串(1:numFeatures),位置=“northeastoutside”

图中包含一个axes对象。标题为Training Observation 1的坐标轴对象包含12个类型为line的对象。这些对象代表特性1、特性2、特性3、特性4、特性5、特性6、特性7、特性8、特性9、特性10、特性11、特性12。

定义网络体系结构

定义LSTM网络架构。

  • 指定一个序列输入层,其输入大小与输入数据的特征数量匹配。

  • 指定一个带有100个隐藏单元的LSTM层,输出序列的最后一个元素。

  • 指定一个大小与类数量匹配的完全连接层,然后是一个softmax层和一个分类层。

inputSize = 12;numHiddenUnits = 100;numClasses = 9;层= [...sequenceInputLayer inputSize lstmLayer (numHiddenUnits OutputMode =“最后一次”) fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer];

指定培训选项

指定培训选项。

  • 使用亚当求解器训练。

  • 训练与迷你批次大小27为50个时代。

  • 因为小批次的序列较短,CPU更适合训练。指定使用CPU进行训练。

  • 以图形形式显示训练进度,抑制冗长输出。

maxEpochs = 50;miniBatchSize = 27个;选择= trainingOptions (“亚当”...MiniBatchSize = MiniBatchSize,...MaxEpochs = MaxEpochs,...ExecutionEnvironment =“cpu”...情节=“训练进步”...Verbose = false);

列车网络的

使用指定的培训选项对LSTM网络进行培训。

网= trainNetwork (XTrain、TTrain层,选择);

{

测试网络

对试验数据进行预测分类精度计算。

(XTest, tt) = japaneseVowelsTestData;欧美=分类(净、XTest MiniBatchSize = MiniBatchSize);acc = sum(YTest == TTest)./numel(TTest)
acc = 0.9297

查看网络的可学习项个数analyzeNetwork函数。

analyzeNetwork(净)

totalLearnables = 46100;

计划的LSTM网络

创建一个相同的网络,LSTM投影层代替LSTM层。

对于LSTM投影层:

  • 指定与LSTM层相同的隐藏单元数

  • 指定输出投影仪尺寸为隐藏单元数量的25%。

  • 指定输入投影仪尺寸为输入尺寸的75%。

  • 通过取其最大值和1,确保输出和输入投影仪尺寸为正。

outputProjectorSize = max(1楼(0.25 * numHiddenUnits));inputProjectorSize = max(1楼(0.75 * inputSize));layersProjected = [...sequenceInputLayer inputSize lstmProjectedLayer (numHiddenUnits、outputProjectorSize inputProjectorSize, OutputMode =“最后一次”) fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer];

用相同的数据和训练选项训练预估的LSTM网络。

netProjected = trainNetwork (XTrain TTrain、layersProjected选项);

{

测试预计网络

对试验数据进行预测分类精度计算。

(XTest, tt) = japaneseVowelsTestData;欧美=分类(netProjected、XTest MiniBatchSize = MiniBatchSize);acc投影= sum(YTest == TTest)./numel(TTest)
accProjected = 0.8784

查看网络的可学习项个数analyzeNetwork函数。

analyzeNetwork (netProjected)

totalLearnablesProjected = 17500;

比较网络

比较每个网络的测试精度和可学习的数量。根据投影的大小,投影网络可以有明显较少的可学习参数,但仍然保持较强的预测精度。

创建一个柱状图,显示每个网络的测试精度。

图栏([acc acc投影])xticklabels([“非预料的”“预计”])包含(“网络”) ylabel (“测试准确性”)标题(“测试准确性”

图中包含一个axes对象。标题为Test Accuracy的axes对象包含一个类型为bar的对象。

创建一个柱状图,显示每个网络的测试精度和可学习的数量。

图栏([totalLearnables totallearnablesprojection]) xticklabels([“非预料的”“预计”])包含(“网络”) ylabel (“可学的”)标题(“可学的”

图中包含一个axes对象。标题为Number of Learnables的axes对象包含一个类型为bar的对象。

另请参阅

|||||||

相关的话题

Baidu
map