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.

featureInputLayer

Capa de entrada de características

Desde R2020b

Descripción

Una capa de entrada de características introduce datos de características en una red neuronal y aplica normalización de datos. Utilice esta capa cuando tenga un conjunto de datos de escalares numéricos que representen características (datos sin dimensiones espaciales ni temporales).

Para una entrada de imagen, utilice imageInputLayer.

Creación

Descripción

layer = featureInputLayer(numFeatures) devuelve una capa de entrada de características y establece la propiedad InputSize en el número de características especificado.

layer = featureInputLayer(numFeatures,Name=Value) establece las propiedades opcionales mediante argumentos de par nombre-valor. Puede especificar varios argumentos de par nombre-valor. Encierre el nombre de cada propiedad entre comillas simples.

ejemplo

Propiedades

expandir todo

Entrada de características

Número de características por cada observación de los datos, especificado como un entero positivo.

Para una entrada de imagen, utilice imageInputLayer.

Normalización de datos para aplicar cada vez que los datos se propagan hacia adelante a través de la capa de entrada, especificada como una de las siguientes:

  • "zerocenter": restar la media especificada por Mean.

  • "zscore": restar la media especificada por Mean y dividir por StandardDeviation.

  • "rescale-symmetric": cambiar la escala de la entrada para que esté en el intervalo [-1, 1] empleando los valores mínimo y máximo especificados por Min y Max, respectivamente.

  • "rescale-zero-one": cambiar la escala de la entrada para que esté en el intervalo [0, 1] empleando los valores mínimo y máximo especificados por Min y Max, respectivamente.

  • "none": no normalizar los datos de entrada.

  • Identificador de función: normalizar los datos empleando la función especificada. La función debe tener la forma Y = f(X), donde X es el dato de entrada y la salida Y es el dato normalizado.

Sugerencia

De forma predeterminada, el software calcula automáticamente las estadísticas de normalización cuando se utiliza la función trainnet. Para ahorrar tiempo durante el entrenamiento, especifique las estadísticas necesarias para la normalización y configure la opción ResetInputNormalization en trainingOptions como 0 (false).

El objeto FeatureInputLayer almacena esta propiedad como un vector de caracteres o un identificador de función.

Dimensión de normalización, especificada como una de las siguientes opciones:

  • "auto": si la opción de entrenamiento es 0 (false) y especifica cualquiera de las estadísticas de normalización (Mean, StandardDeviation, Min o Max), normalizar las dimensiones que coinciden con las estadísticas. De lo contrario, volver a calcular las estadísticas en el momento del entrenamiento y aplicar la normalización por canal.

  • "channel": normalización por canal.

  • "all": normalizar todos los valores utilizando estadísticas escalares.

El objeto FeatureInputLayer almacena esta propiedad como un vector de caracteres.

Media para la normalización cero a centro y puntuación Z, especificada como un vector de 1 por numFeatures de medias por característica, un escalar numérico o [].

Para especificar la propiedad Mean, la propiedad Normalization debe ser "zerocenter" o "zscore". Si Mean es [], el software establece automáticamente la propiedad en el momento del entrenamiento o la inicialización:

  • La función trainnet calcula la media con los datos de entrenamiento y utiliza el valor resultante.

  • La función initialize y la función dlnetwork cuando la opción Initialize es 1 (true) establecen la propiedad en 0.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Desviación estándar para la normalización de puntuación Z, especificada como un vector de 1 por numFeatures de medias por característica, un escalar numérico, o [].

Para especificar la propiedad StandardDeviation, la propiedad Normalization debe ser "zscore". Si StandardDeviation es [], el software establece automáticamente la propiedad en el momento del entrenamiento o la inicialización:

  • La función trainnet calcula la desviación estándar con los datos de entrenamiento y utiliza el valor resultante.

  • La función initialize y la función dlnetwork cuando la opción Initialize es 1 (true) establecen la propiedad en 1.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Valor mínimo para el reescalado, especificado como un vector de 1 por numFeatures de valores mínimos por característica, un escalar numérico o [].

Para especificar la propiedad Min, la Normalization debe ser "rescale-symmetric" o "rescale-zero-one". Si Min es [], el software establece automáticamente la propiedad en el momento del entrenamiento o la inicialización:

  • La función trainnet calcula el valor mínimo con los datos de entrenamiento y utiliza el valor resultante.

  • La función initialize y la función dlnetwork cuando la opción Initialize es 1 (true) establecen la propiedad en -1 y 0 cuando Normalization es "rescale-symmetric" y "rescale-zero-one", respectivamente.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Valor máximo para el reescalado, especificado como un vector de 1 por numFeatures de valores máximos por característica, un escalar numérico o [].

Para especificar la propiedad Max, la Normalization debe ser "rescale-symmetric" o "rescale-zero-one". Si Max es [], el software establece automáticamente la propiedad en el momento del entrenamiento o la inicialización:

  • La función trainnet calcula el valor máximo con los datos de entrenamiento y utiliza el valor resultante.

  • La función initialize y la función dlnetwork cuando la opción Initialize es 1 (true) establecen la propiedad en 1.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Esta propiedad o parámetro es de solo lectura.

Marcador para dividir datos de entrada en componentes reales e imaginarios, especificado como uno de estos valores:

  • 0 (false): no dividir los datos de entrada.

  • 1 (true): dividir los datos de entrada en componentes reales e imaginarios.

Cuando SplitComplexInputs es 1, entonces la capa produce el doble de canales que los datos de entrada que existen. Por ejemplo, si los datos de entrada tienen valores complejos con numChannels canales, entonces la capa produce datos con 2*numChannels canales, donde los canales 1 a numChannels contienen los componentes reales de los datos de entrada y los canales numChannels+1 a 2*numChannels contienen los componentes imaginarios de los datos de entrada. Si los datos de entrada son reales, entonces los canales numChannels+1 a 2*numChannels son todos cero.

Para introducir datos de valores complejos en una red neuronal, la opción SplitComplexInputs de la capa de entrada debe ser 1 (true).

Para ver un ejemplo de cómo entrenar una red con datos con valores complejos, consulte Train Network with Complex-Valued Data.

Capa

Nombre de la capa, especificado como un vector de caracteres o un escalar de cadena. Para entradas en forma de arreglo Layer, las funciones trainnet y dlnetwork asignan automáticamente nombres a las capas con el nombre "".

El objeto FeatureInputLayer almacena esta propiedad como un vector de caracteres.

Tipos de datos: char | string

Esta propiedad o parámetro es de solo lectura.

Número de entradas de la capa. La capa no tiene entradas.

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Nombres de las entradas de la capa. La capa no tiene entradas.

Tipos de datos: cell

Esta propiedad o parámetro es de solo lectura.

Número de salidas de la capa, devuelto como 1. Esta capa solo tiene una salida.

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Nombres de salida, devueltos como {'out'}. Esta capa solo tiene una salida.

Tipos de datos: cell

Ejemplos

contraer todo

Cree una capa de entrada de características con el nombre 'input' para las observaciones que consisten en 21 características.

layer = featureInputLayer(21,'Name','input')
layer = 
  FeatureInputLayer with properties:

                      Name: 'input'
                 InputSize: 21
        SplitComplexInputs: 0

   Hyperparameters
             Normalization: 'none'
    NormalizationDimension: 'auto'

Incluya una capa de entrada de características en un arreglo Layer.

numFeatures = 21;
numClasses = 3;
 
layers = [
    featureInputLayer(numFeatures,'Name','input')
    fullyConnectedLayer(numClasses, 'Name','fc')
    softmaxLayer('Name','sm')
    classificationLayer('Name','classification')]
layers = 
  4x1 Layer array with layers:

     1   'input'            Feature Input           21 features
     2   'fc'               Fully Connected         3 fully connected layer
     3   'sm'               Softmax                 softmax
     4   'classification'   Classification Output   crossentropyex

Defina el tamaño de la imagen de entrada, el número de características de cada observación, el número de clases y el tamaño y número de filtros de la capa de convolución.

imageInputSize = [28 28 1];
numFeatures = 1;
numClasses = 10;
filterSize = 5;
numFilters = 16;

Para crear una red con dos entradas, defina la red en dos partes y únalas, por ejemplo, mediante una capa de concatenación.

Cree un objeto dlnetwork.

net = dlnetwork;

Defina la primera parte de la red. Defina las capas de clasificación de imágenes e incluya una capa plana y una capa de concatenación antes de la última capa totalmente conectada.

layers = [
    imageInputLayer(imageInputSize,Normalization="none")
    convolution2dLayer(filterSize,numFilters,Name="conv")
    reluLayer
    fullyConnectedLayer(50)
    flattenLayer
    concatenationLayer(1,2,Name="concat")
    fullyConnectedLayer(numClasses)
    softmaxLayer];

net = addLayers(net,layers);

Para la segunda parte de la red, añada una capa de entrada de características y conéctela a la segunda entrada de la capa de concatenación.

featInput = featureInputLayer(numFeatures,Name="features");
net = addLayers(net,featInput);
net = connectLayers(net,"features","concat/in2")
net = 
  dlnetwork with properties:

         Layers: [9x1 nnet.cnn.layer.Layer]
    Connections: [8x2 table]
     Learnables: [6x3 table]
          State: [0x3 table]
     InputNames: {'imageinput'  'features'}
    OutputNames: {'softmax'}
    Initialized: 0

  View summary with summary.

Visualice la red.

plot(net)

Figure contains an axes object. The axes object contains an object of type graphplot.

Si tiene un conjunto de datos de características numéricas (por ejemplo, datos tabulares sin dimensiones espaciales ni temporales), puede entrenar una red neuronal profunda utilizando una capa de entrada de características.

Lea los datos de la caja de engranajes del archivo CSV "transmissionCasingData.csv".

filename = "transmissionCasingData.csv";
tbl = readtable(filename,TextType="String");

Convierta las etiquetas para la predicción en categóricas utilizando la función convertvars.

labelName = "GearToothCondition";
tbl = convertvars(tbl,labelName,"categorical");

Para entrenar una red utilizando características categóricas, primero debe convertir las características categóricas en numéricas. Primero, convierta los predictores categóricos en numéricos con la función convertvars especificando un arreglo de cadena que contenga los nombres de todas las variables de entrada categórica. En este conjunto de datos, hay dos características categóricas con los nombres "SensorCondition" y "ShaftCondition".

categoricalPredictorNames = ["SensorCondition" "ShaftCondition"];
tbl = convertvars(tbl,categoricalPredictorNames,"categorical");

Forme un lazo con las variables de entrada categórica. Para cada variable, convierta los valores categóricos en vectores codificados one-hot usando la función onehotencode.

for i = 1:numel(categoricalPredictorNames)
    name = categoricalPredictorNames(i);
    tbl.(name) = onehotencode(tbl.(name),2);
end

Visualice las primeras filas de la tabla. Observe que los predictores categóricos se han dividido en varias columnas.

head(tbl)
    SigMean     SigMedian    SigRMS    SigVar     SigPeak    SigPeak2Peak    SigSkewness    SigKurtosis    SigCrestFactor    SigMAD     SigRangeCumSum    SigCorrDimension    SigApproxEntropy    SigLyapExponent    PeakFreq    HighFreqPower    EnvPower    PeakSpecKurtosis    SensorCondition    ShaftCondition    GearToothCondition
    ________    _________    ______    _______    _______    ____________    ___________    ___________    ______________    _______    ______________    ________________    ________________    _______________    ________    _____________    ________    ________________    _______________    ______________    __________________

    -0.94876     -0.9722     1.3726    0.98387    0.81571       3.6314        -0.041525       2.2666           2.0514         0.8081        28562              1.1429             0.031581            79.931            0          6.75e-06       3.23e-07         162.13             0    1             1    0          No Tooth Fault  
    -0.97537    -0.98958     1.3937    0.99105    0.81571       3.6314        -0.023777       2.2598           2.0203        0.81017        29418              1.1362             0.037835            70.325            0          5.08e-08       9.16e-08         226.12             0    1             1    0          No Tooth Fault  
      1.0502      1.0267     1.4449    0.98491     2.8157       3.6314         -0.04162       2.2658           1.9487        0.80853        31710              1.1479             0.031565            125.19            0          6.74e-06       2.85e-07         162.13             0    1             0    1          No Tooth Fault  
      1.0227      1.0045     1.4288    0.99553     2.8157       3.6314        -0.016356       2.2483           1.9707        0.81324        30984              1.1472             0.032088             112.5            0          4.99e-06        2.4e-07         162.13             0    1             0    1          No Tooth Fault  
      1.0123      1.0024     1.4202    0.99233     2.8157       3.6314        -0.014701       2.2542           1.9826        0.81156        30661              1.1469              0.03287            108.86            0          3.62e-06       2.28e-07         230.39             0    1             0    1          No Tooth Fault  
      1.0275      1.0102     1.4338     1.0001     2.8157       3.6314         -0.02659       2.2439           1.9638        0.81589        31102              1.0985             0.033427            64.576            0          2.55e-06       1.65e-07         230.39             0    1             0    1          No Tooth Fault  
      1.0464      1.0275     1.4477     1.0011     2.8157       3.6314        -0.042849       2.2455           1.9449        0.81595        31665              1.1417             0.034159            98.838            0          1.73e-06       1.55e-07         230.39             0    1             0    1          No Tooth Fault  
      1.0459      1.0257     1.4402    0.98047     2.8157       3.6314        -0.035405       2.2757            1.955        0.80583        31554              1.1345               0.0353            44.223            0          1.11e-06       1.39e-07         230.39             0    1             0    1          No Tooth Fault  

Visualice los nombres de las clases del conjunto de datos.

classNames = categories(tbl{:,labelName})
classNames = 2x1 cell
    {'No Tooth Fault'}
    {'Tooth Fault'   }

Reserve datos para pruebas. Divida los datos en un conjunto de entrenamiento que contenga el 85% de los datos y en un conjunto de prueba que contenga el 15% restante. Para dividir los datos, use la función trainingPartitions, incluida en este ejemplo como un archivo de soporte. Para acceder al archivo, abra el ejemplo como un script en vivo.

numObservations = size(tbl,1);
[idxTrain,idxTest] = trainingPartitions(numObservations,[0.85 0.15]);

tblTrain = tbl(idxTrain,:);
tblTest = tbl(idxTest,:);

Convierta los datos a un formato compatible con la función trainnet. Convierta los predictores y objetivos en arreglos numéricos y categóricos, respectivamente. Para la entrada de características, la red espera datos con filas que correspondan a las observaciones y columnas que correspondan a las características. Si los datos tienen un diseño diferente, puede preprocesarlos para que tengan este diseño o puede proporcionar información de diseño utilizando formatos de datos. Para obtener más información, consulte Deep Learning Data Formats.

predictorNames = ["SigMean" "SigMedian" "SigRMS" "SigVar" "SigPeak" "SigPeak2Peak" ...
    "SigSkewness" "SigKurtosis" "SigCrestFactor" "SigMAD" "SigRangeCumSum" ...
    "SigCorrDimension" "SigApproxEntropy" "SigLyapExponent" "PeakFreq" ...
    "HighFreqPower" "EnvPower" "PeakSpecKurtosis" "SensorCondition" "ShaftCondition"];
XTrain = table2array(tblTrain(:,predictorNames));
TTrain = tblTrain.(labelName);

XTest = table2array(tblTest(:,predictorNames));
TTest = tblTest.(labelName);

Defina una red con una capa de entrada de características y especifique el número de características. Configure también la capa de entrada para normalizar los datos utilizando la normalización de puntuación Z.

numFeatures = size(XTrain,2);
numClasses = numel(classNames);
 
layers = [
    featureInputLayer(numFeatures,Normalization="zscore")
    fullyConnectedLayer(16)
    layerNormalizationLayer
    reluLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer];

Especifique las opciones de entrenamiento:

  • Entrenar usando el solver L-BFGS. Este solver es adecuado para tareas con redes pequeñas y cuando los datos caben en la memoria.

  • Entrenar usando la CPU. Dado que la red y los datos son pequeños, la CPU es más adecuada.

  • Muestre el progreso del entrenamiento en una gráfica.

  • Suprimir la salida detallada.

options = trainingOptions("lbfgs", ...
    ExecutionEnvironment="cpu", ...
    Plots="training-progress", ...
    Verbose=false);

Entrene la red con la función trainnet. Para la clasificación, utilice la pérdida de entropía cruzada.

net = trainnet(XTrain,TTrain,layers,"crossentropy",options);

Prediga las etiquetas de los datos de prueba con la red entrenada. Prediga las puntuaciones de clasificación utilizando la red entrenada y luego convierta las predicciones en etiquetas con la función onehotdecode.

YTest = minibatchpredict(net,XTest);
YTest = onehotdecode(YTest,classNames,2);

Visualice las predicciones en una gráfica de confusión.

confusionchart(TTest,YTest)

Figure contains an object of type ConfusionMatrixChart.

Calcule la precisión de clasificación. La precisión es la proporción de etiquetas que la red predice correctamente.

accuracy = mean(YTest == TTest)
accuracy = 1

Algoritmos

expandir todo

Capacidades ampliadas

Historial de versiones

Introducido en R2020b