这个例子展示了如何使用自定义的迷你批处理数据存储对内存不足的序列数据训练深度学习网络。
迷你批处理数据存储是支持批量读取数据的数据存储的实现。金宝app使用小批量数据存储读取内存不足的数据或在读取批量数据时执行特定的预处理操作。您可以使用小批量数据存储作为深度学习应用程序的训练、验证、测试和预测数据集的来源。
本示例使用自定义的迷你批处理数据存储sequenceDatastore.m
.您可以通过自定义数据存储函数来调整该数据存储以适应您的数据。有关如何创建自己的自定义迷你批处理数据存储的示例,请参见开发自定义小批量数据存储.
加载[1]和[2]中描述的日语元音数据集。的压缩文件japaneseVowels.zip
包含长度可变的序列。序列被分成两个文件夹,火车
和测试
,分别包含训练序列和测试序列。在每个文件夹中,序列被划分为子文件夹,这些子文件夹从编号开始1
来9
.这些子文件夹的名称就是标签名称。MAT文件表示每个序列。每个序列是一个矩阵,有12行,每一行代表一个特征,不同数量的列代表每个时间步骤。行数是序列维数,列数是序列长度。
解压缩序列数据。
文件名=“japaneseVowels.zip”;outputFolder = fullfile (tempdir,“japaneseVowels”);解压缩(文件名,outputFolder);
创建自定义的小批量数据存储。的mini-batch数据存储sequenceDatastore
从文件夹中读取数据,并从子文件夹名称中获取标签。要使用此数据存储,首先保存文件sequenceDatastore.m
的路径。
使用。创建包含序列数据的数据存储sequenceDatastore
.
folderTrain = fullfile (outputFolder,“训练”);dsTrain = sequenceDatastore (folderTrain)
datore: [1×1 matlab.io.datastore.]FileDatastore标签:[270×1 categorical] NumClasses: 9 SequenceDimension: 12 MiniBatchSize: 128 NumObservations: 270
定义LSTM网络架构。将输入数据的序列维度指定为输入大小。指定一个包含100个隐藏单元的LSTM层,并输出序列的最后一个元素。最后,指定输出大小等于类数的全连接层,然后是softmax层和分类层。
inputSize = dsTrain.SequenceDimension;numClasses = dsTrain.NumClasses;numHiddenUnits = 100;layer = [sequenceInputLayer(inputSize) lstmLayer(numHiddenUnits,“OutputMode”,“最后一次”) fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer;
指定培训选项。指定“亚当”
作为求解器和“GradientThreshold”
为1。设置mini-batch size为27,最大epoch数为75。为了确保数据存储创建的小批量大小与trainNetwork
函数所期望的,还将数据存储的迷你批处理大小设置为相同的值。
因为迷你批很小,序列很短,所以CPU更适合于训练。集“ExecutionEnvironment”
来“cpu”
.如果需要在GPU上进行训练,请设置“ExecutionEnvironment”
来“汽车”
(默认值)。
miniBatchSize = 27个;选择= trainingOptions (“亚当”,...“ExecutionEnvironment”,“cpu”,...“MaxEpochs”, 75,...“MiniBatchSize”miniBatchSize,...“GradientThreshold”,1,...“详细”0,...“阴谋”,“训练进步”);dsTrain。MiniBatchSize = MiniBatchSize;
使用指定的训练选项训练LSTM网络。
网= trainNetwork (dsTrain层,选项);
从测试数据创建一个序列数据存储。
folderTest = fullfile (outputFolder,“测试”);dst = sequenceDatastore (folderTest);
对测试数据进行分类。指定与训练数据相同的小批量大小。为了确保数据存储创建的小批量大小与分类
函数所期望的,还将数据存储的迷你批处理大小设置为相同的值。
dst。MiniBatchSize = MiniBatchSize;dst YPred =分类(净,“MiniBatchSize”, miniBatchSize);
计算预测的分类精度。
欧美= dsTest.Labels;acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9432
工藤,富山,新博。“使用通过区域的多维曲线分类”。模式识别的字母.第20卷,第11-13期,第1103-1111页。
工藤,富山,新博。日语元音数据集.https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
lstmLayer
|sequenceInputLayer
|trainingOptions
|trainNetwork