列车网络的使用内存不足的序列数据
这个例子展示了如何培养深入学习网络改造,结合数据存储内存不足的序列数据。
改变了数据存储转换或过程从底层数据存储读取数据。您可以使用一个转换数据存储的培训、验证、测试和预测深度学习应用程序的数据集。使用转换数据存储读取内存不足数据或执行特定的预处理操作,当阅读批次的数据。当你有单独的数据存储包含预测和标签,您可以把它们,这样你就可以将数据输入到一个深度学习网络。
当训练网络,软件创建mini-batches序列长度相同的填充,删除,或分割输入数据。内存数据的trainingOptions
函数提供了选项板和截断输入序列,然而,对于内存不足数据,您必须手动垫和截断序列。
负荷训练数据
加载描述的日本元音数据集[1]和[2]。的压缩文件japaneseVowels.zip
包含可变长度的序列。序列分为两个文件夹,火车
和测试
包含训练序列和测试序列,分别。在每一个文件夹,序列分为子文件夹,从编号1
来9
。这些子文件夹的名字标签的名字。每个序列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);结束序列={序列};结束
另请参阅
lstmLayer
|trainNetwork
|trainingOptions
|sequenceInputLayer
|结合
|变换