사용자지정미니배치데이터저장소를사용하여시퀀스데이터에대해신경망훈련시키기
이예제에서는사용자지정미니배치데이터저장소를사용하여메모리에다담을수없을정도로큰시퀀스데이터를대상으로딥러닝신경망을훈련시키는방법을보여줍니다。
미니배치데이터저장소란배치단위로데이터를읽을수있는데이터저장소를구현한것입니다。미니배치데이터저장소를사용하여메모리에다담을수없을정도로큰데이터를읽어들이거나,데이터를배치단위로읽을때특정전처리연산을수행할수있습니다。미니배치데이터저장소는딥러닝응용프로그램을위한훈련,검증,테스트및예측데이터세트의소스로사용할수있습니다。
이예제에서는사용자지정미니배치데이터저장소sequenceDatastore
를사용합니다。이데이터저장소는이예제에지원파일로첨부되어있습니다。데이터저장소함수를사용자지정하여이데이터저장소를데이터에맞게수정할수있습니다。고유한사용자지정미니배치데이터저장소를만드는예제는开发自定义小批量数据存储항목을참조하십시오。
훈련데이터불러오기
[1]과[2]에서설명한日语元音데이터세트를불러옵니다。Zip파일japaneseVowels.zip
은다양한길이의시퀀스를포함합니다。이시퀀스는각각훈련시퀀스와테스트시퀀스를포함하는火车
과测试
라는두폴더로나뉘어있습니다。각폴더에서시퀀스는1
부터9
까지번호가지정된하위폴더로나뉘어있습니다。하위폴더의이름은레이블이름입니다。하나의mat파일은각시퀀스를나타냅니다。각시퀀스는각특징에대해하나의행을갖는12개의행과각시간스텝에대해하나의열을갖는가변개수의열로이루어진행렬입니다。행개수는시퀀스차원이고,열개수는시퀀스길이입니다。
시퀀스데이터의압축을풉니다。
文件名=“japaneseVowels.zip”;outputFolder = fullfile(tempdir,“japaneseVowels”);解压缩(文件名,outputFolder);
사용자지정미니배치데이터저장소만들기
사용자지정미니배치데이터저장소를만듭니다。미니배치데이터저장소sequenceDatastore
는폴더에서데이터를읽어들이고하위폴더이름에서레이블을가져옵니다。
sequenceDatastore
를사용하여시퀀스데이터를포함하는데이터저장소를만듭니다。
folderTrain = fullfile(输出文件夹,“训练”);dsTrain = sequencedastore (folderTrain)
dsTrain = sequenceDatastore带有属性:数据存储:[1×1 matlab.io.datastore.]FileDatastore] Labels: [270×1 categorical] NumClasses: 9 SequenceDimension: 12 MiniBatchSize: 128 NumObservations: 270
LSTM신경망아키텍처정의하기
LSTM신경망아키텍처를정의합니다。입력데이터의시퀀스차원을입력크기로지정합니다。은닉유닛100개를갖는LSTM계층을지정하고시퀀스의마지막소를출력합니다。마지막으로,출력크기가클래스개수와같은완전연결계층을지정하고그뒤에소프트맥스계층과분류계층을지정합니다。
inputSize = dsTrain.SequenceDimension;numClasses = dsTrain.NumClasses;numHiddenUnits = 100;图层= [sequenceInputLayer(inputSize) lstmLayer(numHiddenUnits,“OutputMode”,“最后一次”) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
훈련옵션을지정합니다。“亚当”
을솔버로지정하고“GradientThreshold”
를1로지정합니다。미니배치의크기를27로설정하고최대纪元횟수를75로설정합니다。데이터저장소가trainNetwork
함수에필요한크기의미니배치를만들도록하려면데이터저장소의미니배치크기도같은값으로설정하십시오。
미니배치는짧은시퀀스로구성된크기가작은배치이므로훈련에는CPU가더적절합니다。“ExecutionEnvironment”
를“cpu”
로설정합니다。Gpu를사용할수있는경우Gpu에서훈련시키려면“ExecutionEnvironment”
를“汽车”
(디폴트값)로설정하십시오。
miniBatchSize = 27;选项= trainingOptions(“亚当”,…“ExecutionEnvironment”,“cpu”,…“MaxEpochs”, 75,…“MiniBatchSize”miniBatchSize,…“GradientThreshold”, 1…“详细”0,…“阴谋”,“训练进步”);dsTrain。MiniBatchSize = MiniBatchSize;
지정된훈련옵션으로LSTM신경망을훈련시킵니다。
net = trainNetwork(dsTrain,layers,options);
신경망테스트하기
테스트데이터에서시퀀스데이터저장소를만듭니다。
folderTest = fullfile(输出文件夹,“测试”);dsTest = sequenceDatastore(folderTest);
테스트데이터를분류합니다。훈련데이터와같도록미니배치의크기를지정합니다。데이터저장소가分类
함수에필요한크기의미니배치를만들도록하려면데이터저장소의미니배치크기도같은값으로설정하십시오。
dst。MiniBatchSize = MiniBatchSize;YPred =分类(net,dsTest,“MiniBatchSize”, miniBatchSize);
예측의분류정확도를계산합니다。
YTest = dsTest.Labels;acc = sum(YPred == YTest)./ nummel (YTest)
Acc = 0.9243
참고 문헌
[1]工藤,M.,富山,M. Shimbo。“使用穿过区域的多维曲线分类”模式识别信。第20卷,第11-13号,第1103-1111页。
[2]工藤,M.,富山,M. Shimbo。日语元音数据集。https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
참고 항목
trainNetwork
|trainingOptions
|lstmLayer
|sequenceInputLayer