LSTM投影层列车网络
训练具有LSTM投影层的深度学习网络,用于序列到标签的分类。
要压缩一个深度学习网络,可以使用预计层.该层引入了可学习的投影矩阵 它取代了形式的乘法 ,在那里 有乘法运算的矩阵是可学习的吗 ,和商店 而且 而不是存储 .当 项目 在较低的维空间中,这通常需要更少的内存来存储可学习参数,并具有同样强的预测精度。
通过投影LSTM层而不是减少LSTM层的隐藏单元的数量来减少可学习参数的数量,可以保持该层的输出大小,进而保持下游层的大小,从而可以获得更好的预测精度。
这些图表比较了LSTM网络和本例中训练的LSTM网络的测试精度和可学习参数的数量。
本例首先训练一个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”)
定义网络体系结构
定义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 (“测试准确性”)标题(“测试准确性”)
创建一个柱状图,显示每个网络的测试精度和可学习的数量。
图栏([totalLearnables totallearnablesprojection]) xticklabels([“非预料的”,“预计”])包含(“网络”) ylabel (“可学的”)标题(“可学的”)
另请参阅
lstmProjectedLayer
|trainingOptions
|trainNetwork
|sequenceInputLayer
|lstmLayer
|bilstmLayer
|gruLayer
|convolution1dLayer