主要内容

列车网络的使用内存不足的序列数据

这个例子展示了如何培养深入学习网络改造,结合数据存储内存不足的序列数据。

改变了数据存储转换或过程从底层数据存储读取数据。您可以使用一个转换数据存储的培训、验证、测试和预测深度学习应用程序的数据集。使用转换数据存储读取内存不足数据或执行特定的预处理操作,当阅读批次的数据。当你有单独的数据存储包含预测和标签,您可以把它们,这样你就可以将数据输入到一个深度学习网络。

当训练网络,软件创建mini-batches序列长度相同的填充,删除,或分割输入数据。内存数据的trainingOptions函数提供了选项板和截断输入序列,然而,对于内存不足数据,您必须手动垫和截断序列。

负荷训练数据

加载描述的日本元音数据集[1]和[2]。的压缩文件japaneseVowels.zip包含可变长度的序列。序列分为两个文件夹,火车测试包含训练序列和测试序列,分别。在每一个文件夹,序列分为子文件夹,从编号19。这些子文件夹的名字标签的名字。每个序列MAT文件表示。每个序列是一个矩阵12行,每一行特性,不同列数,每个时间步一列。序列维的行数和列数是序列长度。

解压缩序列数据。

文件名=“japaneseVowels.zip”;outputFolder = fullfile (tempdir,“japaneseVowels”);解压缩(文件名,outputFolder);

训练预测,数据存储创建一个文件并指定阅读功能负载函数。的负载函数,从MAT-file加载数据到一个结构数组。读文件培训文件夹,子文件夹的设置“IncludeSubfolders”选项真正的

folderTrain = fullfile (outputFolder,“训练”);fdsPredictorTrain = fileDatastore (folderTrain,“ReadFcn”@load,“IncludeSubfolders”,真正的);

预览数据存储。返回的结构包含一个序列从第一个文件。

预览(fdsPredictorTrain)
ans =结构体字段:X(12×20双):

的标签,创建一个文件数据存储并指定阅读功能readLabel函数,定义的例子。的readLabel函数提取子文件夹名称的标签。

一会=字符串(1:9);fdsLabelTrain = fileDatastore (folderTrain,“ReadFcn”@(文件名)readLabel(文件名,类名),“IncludeSubfolders”,真正的);

预览数据存储。输出对应于第一个文件的标签。

预览(fdsLabelTrain)
ans =分类1

变换和组合数据存储

输入序列数据存储的数据预测的深度学习网络的mini-batches序列必须具有相同的长度。转换数据存储使用padSequence函数定义的数据存储,垫或截断序列长度20。

sequenceLength = 20;tdsTrain =变换(fdsPredictorTrain @(数据)padSequence(数据、sequenceLength));

预览转换后的数据存储。输出对应的顺序从第一个文件。

X =预览(tdsTrain)
X =1×1单元阵列{12×20双}

输入预测和标签从数据存储到一个深学习网络,结合使用结合函数。

cdsTrain =结合(tdsTrain fdsLabelTrain);

预览合并后的数据存储。数据存储返回1×2单元阵列。第一个元素对应于预测。第二个元素对应的标签。

预览(cdsTrain)
ans =1×2单元阵列{12×20双}{[1]}

定义LSTM网络体系结构

定义LSTM网络体系结构。指定输入数据的数量特征作为输入的大小。指定一个LSTM隐藏层100单元和输出序列的最后一个元素。最后,指定一个完全连接层与输出尺寸等于类的数量,其次是softmax层和一层分类。

numFeatures = 12;numClasses =元素个数(类名);numHiddenUnits = 100;层= [sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”,“最后一次”)fullyConnectedLayer (numClasses) softmaxLayer classificationLayer];

指定培训选项。将解算器“亚当”“GradientThreshold”2。设置mini-batch大小27和设置时代的最大数量为75。数据存储不支持洗牌,所以集金宝app“洗牌”“永远”

因为mini-batches小短序列,CPU更适合培训。集“ExecutionEnvironment”“cpu”。火车在GPU,如果可用,集“ExecutionEnvironment”“汽车”(默认值)。

miniBatchSize = 27个;选择= trainingOptions (“亚当”,“ExecutionEnvironment”,“cpu”,“MaxEpochs”,75,“MiniBatchSize”miniBatchSize,“GradientThreshold”2,“洗牌”,“永远”,“详细”0,“阴谋”,“训练进步”);

火车LSTM网络培训指定的选项。

网= trainNetwork (cdsTrain层,选项);

测试网络

创建一个包含了转换数据存储测试数据为训练数据使用相同的步骤。

folderTest = fullfile (outputFolder,“测试”);fdsPredictorTest = fileDatastore (folderTest,“ReadFcn”@load,“IncludeSubfolders”,真正的);tdsTest =变换(fdsPredictorTest @(数据)padSequence(数据、sequenceLength));

网络上使用训练的测试数据做出预测。

tdsTest YPred =分类(净,“MiniBatchSize”,miniBatchSize);

计算测试数据的分类精度。测试集的标签,创建一个文件数据存储和读取功能readLabel并指定包含子文件夹。指定的输出是垂直concatenateable通过设置“UniformRead”选项真正的

fdsLabelTest = fileDatastore (folderTest,“ReadFcn”@(文件名)readLabel(文件名,类名),“IncludeSubfolders”,真的,“UniformRead”,真正的);欧美= readall (fdsLabelTest);
精度=意味着(YPred = =次)
精度= 0.9351

功能

readLabel函数提取类别的标签从指定的文件名一会

函数标签= readLabel(文件名,一会)filepath = fileparts(文件名);[~,标签]= fileparts (filepath);标签=分类(字符串(标签),类名);结束

padSequence垫或序列截断函数data.X有指定的序列长度在1×1细胞并返回结果。

函数序列= padSequence(数据、sequenceLength)序列= data.X;[C, S] =大小(序列);如果年代< sequenceLength填充= 0 (C, sequenceLength-S);序列=(序列填充);其他的序列=序列(:1:sequenceLength);结束序列={序列};结束

另请参阅

|||||

相关的话题