Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Clasificación de secuencias mediante convoluciones 1D

En este ejemplo se muestra cómo clasificar datos secuenciales mediante una red neuronal convolucional 1D.

Para entrenar una red neuronal profunda con la que clasificar datos secuenciales, se puede utilizar una red neuronal convolucional 1D. Una capa convolucional 1D aprende características aplicando filtros convolucionales deslizantes a la entrada 1D. El uso de capas convolucionales 1D puede ser más rápido que el uso de capas recurrentes porque las capas convolucionales pueden procesar la entrada con una sola operación. En cambio, las capas recurrentes deben iterar sobre las unidades de tiempo de la entrada. No obstante, según la arquitectura de la red y los tamaños de los filtros, las capas convolucionales 1D podrían no rendir tan bien como las capas recurrentes, que pueden aprender dependencias a largo plazo entre las unidades de tiempo.

En este ejemplo se usa el conjunto de datos de vocales japonesas como se describe en [1] y [2]. En este ejemplo se entrena una red neuronal convolucional 1D para reconocer al hablante dados los datos de series de tiempo que representan dos vocales japonesas pronunciadas consecutivamente. Los datos de entrenamiento contienen datos de series de tiempo para nueve hablantes. Cada secuencia cuenta con 12 características y diferentes longitudes. El conjunto de datos contiene 270 observaciones de entrenamiento y 370 observaciones de prueba.

Cargar datos secuenciales

Cargue los datos de entrenamiento de las vocales japonesas. Los datos predictores son un arreglo de celdas que contienen secuencias de longitud variable con 12 características. Los datos objetivo son un vector categórico con etiquetas "1","2",...,"9", que se corresponden con los nueve hablantes. Las secuencias predictoras son matrices con 12 filas (una fila por característica) y un número variable de columnas (una columna por unidad de tiempo).

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

Visualice las primeras secuencias de entrenamiento.

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

Visualice la primera serie de tiempo en una gráfica. Cada línea se corresponde con una característica.

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, xlabel Time Step 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.

Vea el número de clases de los datos de entrenamiento.

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

Definir la arquitectura de la red convolucional 1D

Defina la arquitectura de la red neuronal convolucional 1D.

  • Especifique el tamaño de la entrada como el número de características de los datos de entrada.

  • Especifique dos bloques de capas convolucionales 1D, ReLU y normalización de capas, donde la capa convolucional tiene un tamaño de filtro de 3. Especifique 32 y 64 filtros para la primera y la segunda capa convolucional, respectivamente. Para ambas capas convolucionales, rellene la parte izquierda de las entradas de manera que las salidas tengan la misma longitud (causal padding).

  • Para reducir la salida de las capas convolucionales a un solo vector, utilice una capa de agrupación media global 1D.

  • Para asignar la salida a un vector de probabilidades, especifique una capa totalmente conectada con un tamaño de salida que coincida con el número de clases, seguida de una capa softmax y una capa de clasificación.

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];

Especificar las opciones de entrenamiento

Especifique las opciones de entrenamiento:

  • Entrenar usando el optimizador Adam.

  • Entrenar con un tamaño de minilote de 27 durante 15 épocas.

  • Rellenar la parte izquierda de las secuencias.

  • Validar la red usando los datos de validación.

  • Monitorizar el progreso del entrenamiento en una gráfica y omitir la salida detallada.

miniBatchSize = 27;

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

Entrenar la red

Entrene la red con las opciones de entrenamiento especificadas mediante la función trainNetwork.

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

Figure Training Progress (03-Apr-2023 07:59:11) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 8 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 8 objects of type patch, text, line.

Probar la red

Clasifique los datos de validación mediante las mismas opciones de tamaño de minilote y de relleno de secuencias utilizadas para el entrenamiento.

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

Calcule la precisión de clasificación de las predicciones.

acc = mean(YPred == TValidation)
acc = 0.9514

Visualice las predicciones en una matriz de confusión.

confusionchart(TValidation,YPred)

Figure contains an object of type ConfusionMatrixChart.

Referencias

[1] Kudo, Mineichi, Jun Toyama y Masaru Shimbo. “Multidimensional Curve Classification Using Passing-through Regions.” Pattern Recognition Letters 20, núm. 11–13 (noviembre de 1999): 1103–11. https://doi.org/10.1016/S0167-8655(99)00077-X

[2] Kudo, Mineichi, Jun Toyama y Masaru Shimbo. "Japanese Vowels Data Set." Distribuido por UCI Machine Learning Repository. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

Consulte también

| | | | | | |

Temas relacionados