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")
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);
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)
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
convolution1dLayer
| trainingOptions
| trainNetwork
| sequenceInputLayer
| maxPooling1dLayer
| averagePooling1dLayer
| globalMaxPooling1dLayer
| globalAveragePooling1dLayer
Temas relacionados
- Sequence-to-Sequence Classification Using 1-D Convolutions
- Clasificación de secuencias mediante deep learning
- Train Sequence Classification Network Using Data With Imbalanced Classes
- Clasificación secuencia a secuencia mediante deep learning
- Regresión de secuencia a secuencia mediante deep learning
- Regresión de secuencia a uno mediante deep learning
- Pronóstico de series de tiempo mediante deep learning
- Interpret Deep Learning Time-Series Classifications Using Grad-CAM
- Redes neuronales de memoria de corto-largo plazo
- Lista de capas de deep learning