Классификация последовательностей Используя 1D свертки

В этом примере показано, как классифицировать данные о последовательности с помощью 1D сверточной нейронной сети.

Чтобы обучить глубокую нейронную сеть классифицировать данные о последовательности, можно использовать 1D сверточную нейронную сеть. 1D сверточный слой изучает функции путем применения скольжения сверточных фильтров к 1D входу. Используя 1D сверточные слои может быть быстрее, чем использование текущих слоев, потому что сверточные слои могут обработать вход с одной операцией. В отличие от этого, текущие слои должны выполнить итерации по временным шагам входа. Однако в зависимости от сетевой архитектуры и размеров фильтра, 1D сверточные слои не могут выполнить, а также текущие слои, которые могут изучить долгосрочные зависимости между временными шагами.

Этот пример использует японский набор данных Гласных, описанный в [1] и [2]. Этот пример обучает 1D сверточную нейронную сеть распознавать динамик, данный данные временных рядов, представляющие два японских гласные, на которых говорят по очереди. Обучающие данные содержат данные временных рядов для девяти динамиков. Каждая последовательность имеет 12 функций и варьируется по длине. Набор данных содержит 270 учебных наблюдений и 370 тестовых наблюдений.

Загрузите данные о последовательности

Загрузите японские обучающие данные Гласных. Данные о предикторе являются массивом ячеек, содержащим последовательности различной длины с 12 функциями. Целевые данные являются категориальным вектором из меток "1", "2"..., "9", которые соответствуют этим девяти динамикам. Последовательности предиктора являются матрицами с 12 строками (одна строка для каждого признака) и различным количеством столбцов (один столбец для каждого временного шага).

[XTrain,TTrain] = japaneseVowelsTrainData;
[XValidation,TValidation] = japaneseVowelsTestData;

Просмотрите первые несколько обучающих последовательностей.

XTrain(1:5)
ans=5×1 cell array
    {12x20 double}
    {12x26 double}
    {12x22 double}
    {12x20 double}
    {12x21 double}

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

figure
plot(XTrain{1}')
xlabel("Time Step")
title("Training Observation 1")
numFeatures = size(XTrain{1},1);
legend("Feature " + string(1:numFeatures),Location="northeastoutside")

Figure contains an axes object. The axes object with title Training Observation 1 contains 12 objects of type line. These objects represent Feature 1, Feature 2, Feature 3, Feature 4, Feature 5, Feature 6, Feature 7, Feature 8, Feature 9, Feature 10, Feature 11, Feature 12.

Просмотрите количество классов в обучающих данных.

classes = categories(TTrain);
numClasses = numel(classes)
numClasses = 9

Задайте 1D сверточную сетевую архитектуру

Задайте 1D архитектуру сверточной нейронной сети.

  • Задайте входной размер как количество функций входных данных.

  • Задайте два блока 1D свертки, ReLU и слоев нормализации слоя, где сверточный слой имеет размер фильтра 3. Задайте 32 и 64 фильтра для первых и вторых сверточных слоев, соответственно. Для обоих сверточных слоев лево-заполните входные параметры, таким образом, что выходные параметры имеют ту же длину (причинное дополнение).

  • Чтобы сократить выход сверточных слоев к одному вектору, используйте 1D глобальный средний слой объединения.

  • Чтобы сопоставить выход с вектором из вероятностей, задайте полносвязный слой с выходным размером, совпадающим с количеством классов, сопровождаемых softmax слоем и слоем классификации.

filterSize = 3;
numFilters = 32;

layers = [ ...
    sequenceInputLayer(numFeatures)
    convolution1dLayer(filterSize,numFilters,Padding="causal")
    reluLayer
    layerNormalizationLayer
    convolution1dLayer(filterSize,2*numFilters,Padding="causal")
    reluLayer
    layerNormalizationLayer
    globalAveragePooling1dLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

Задайте опции обучения

Задайте опции обучения:

  • Обучите использование оптимизатора Адама.

  • Обучайтесь с мини-пакетным размером 27 в течение 15 эпох.

  • Лево-заполните последовательности.

  • Проверьте сеть с помощью данных о валидации.

  • Контролируйте процесс обучения в графике и подавите многословный выход.

miniBatchSize = 27;

options = trainingOptions("adam", ...
    MiniBatchSize=miniBatchSize, ...
    MaxEpochs=15, ...
    SequencePaddingDirection="left", ...
    ValidationData={XValidation,TValidation}, ...
    Plots="training-progress", ...
    Verbose=0);

Обучение сети

Обучите сеть с заданными опциями обучения с помощью trainNetwork функция.

net = trainNetwork(XTrain,TTrain,layers,options);

Figure Training Progress (25-Aug-2021 07:25:17) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 8 objects of type patch, text, line. Axes object 2 contains 8 objects of type patch, text, line.

Тестирование сети

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

YPred = classify(net,XValidation, ...
    MiniBatchSize=miniBatchSize, ...
    SequencePaddingDirection="left");

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

acc = mean(YPred == TValidation)
acc = 0.9568

Визуализируйте предсказания в матрице беспорядка.

confusionchart(TValidation,YPred)

Figure contains an object of type ConfusionMatrixChart.

Ссылки

[1] Kudo, Mineichi, Юн Тояма и Масару Шимбо. “Многомерная Классификация Кривых Используя Прохождение через области”. Буквы Распознавания образов 20, № 11-13 (ноябрь 1999): 1103–11. https://doi.org/10.1016/S0167-8655 (99) 00077-X

[2] Kudo, Mineichi, Юн Тояма и Масару Шимбо. "Японский Набор данных Гласных". Распределенный Репозиторием Машинного обучения UCI. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

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

| | | | | | |

Похожие темы