Обучите сеть Используя пользовательский мини-пакетный Datastore для данных о последовательности

Этот пример показывает, как обучить нейронную сеть для глубокого обучения на данных о последовательности из памяти с помощью пользовательского мини-пакетного datastore.

Мини-пакетный datastore является реализацией datastore с поддержкой чтения данных в пакетах. Используйте мини-пакетные хранилища данных, чтобы считать данные, которые не помещаются в память, или выполнить определенные операции предварительной обработки при чтении пакетов данных. Можно использовать мини-пакетный datastore в качестве источника обучения, валидации, теста и наборов данных прогноза для применения глубокого обучения.

Этот пример использует пользовательский мини-пакетный datastore sequenceDatastore.m. Можно адаптировать этот datastore к данным путем настройки функций datastore. Для примера, показывающего, как создать ваш собственный мини-пакетный datastore, смотрите, Разрабатывают Пользовательский Мини-пакетный Datastore.

Загрузите данные тренировки

Загрузите японский набор данных Гласных, как описано в [1] и [2]. Zip-файл japaneseVowels.zip содержит последовательности переменной длины. Последовательности разделены на две папки, Train и Test, которые содержат обучающие последовательности и тестируют последовательности, соответственно. В каждой из этих папок последовательности разделены на подпапки, которые пронумерованы от 1 до 9. Имена этих подпапок являются именами метки. Файл MAT представляет каждую последовательность. Каждая последовательность является матрицей с 12 строками, с одной строкой для каждой функции и переменным количеством столбцов, с одним столбцом для каждого временного шага. Количество строк является размерностью последовательности, и количество столбцов является длиной последовательности.

Разархивируйте данные о последовательности.

filename = "japaneseVowels.zip";
outputFolder = fullfile(tempdir,"japaneseVowels");
unzip(filename,outputFolder);

Создайте пользовательский мини-пакетный Datastore

Создайте пользовательский мини-пакетный datastore. Мини-пакетный datastore sequenceDatastore считывает данные из папки и получает метки от подымен папок. Чтобы использовать этот datastore, сначала сохраните файл sequenceDatastore.m к пути.

Создайте datastore, содержащий данные о последовательности с помощью sequenceDatastore.

folderTrain = fullfile(outputFolder,"Train");
dsTrain = sequenceDatastore(folderTrain)
dsTrain = 
  sequenceDatastore with properties:

            Datastore: [1×1 matlab.io.datastore.FileDatastore]
               Labels: [270×1 categorical]
           NumClasses: 9
    SequenceDimension: 12
        MiniBatchSize: 128
      NumObservations: 270

Задайте сетевую архитектуру LSTM

Задайте архитектуру сети LSTM. Задайте размерность последовательности входных данных как входной размер. Задайте слой LSTM с 100 скрытыми модулями и выводить последний элемент последовательности. Наконец, задайте полносвязный слой с выходным размером, равным количеству классов, сопровождаемых softmax слоем и слоем классификации.

inputSize = dsTrain.SequenceDimension;
numClasses = dsTrain.NumClasses;
numHiddenUnits = 100;
layers = [ ...
    sequenceInputLayer(inputSize)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

Задайте опции обучения. Задайте 'adam' как решатель и 'GradientThreshold' как 1. Установите мини-пакетный размер на 27 и определите максимальный номер эпох к 75.

Поскольку мини-пакеты являются маленькими с короткими последовательностями, центральный процессор лучше подходит для обучения. Установите 'ExecutionEnvironment' на 'cpu'. Чтобы обучаться на графическом процессоре, при наличии, устанавливает 'ExecutionEnvironment' на 'auto' (значение по умолчанию).

miniBatchSize = 27;
options = trainingOptions('adam', ...
    'ExecutionEnvironment','cpu', ...
    'MaxEpochs',75, ...
    'MiniBatchSize',miniBatchSize, ...
    'GradientThreshold',1, ...
    'Verbose',0, ...
    'Plots','training-progress');

Обучите сеть LSTM с заданными опциями обучения.

net = trainNetwork(dsTrain,layers,options);

Протестируйте сеть

Создайте datastore последовательности из тестовых данных.

folderTest = fullfile(outputFolder,"Test");
dsTest = sequenceDatastore(folderTest);

Классифицируйте тестовые данные. Задайте тот же мини-пакетный размер что касается данных тренировки.

YPred = classify(net,dsTest,'MiniBatchSize',miniBatchSize);

Вычислите точность классификации прогнозов.

YTest = dsTest.Labels;
acc = sum(YPred == YTest)./numel(YTest)
acc = 0.8892

Ссылки

[1] Kudo, M. J. Тояма, и М. Шимбо. "Многомерная Классификация Кривых Используя Прохождение через области". Буквы Распознавания образов. Издание 20, № 11-13, стр 1103–1111.

[2] Kudo, M. J. Тояма, и М. Шимбо. Японский набор данных гласных. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

Смотрите также

| | |

Похожие темы