featureInputLayer
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
devuelve una capa de entrada de características y establece la propiedad layer
= featureInputLayer(numFeatures
)InputSize
en el número de características especificado.
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.layer
= featureInputLayer(numFeatures
,Name=Value
)
Propiedades
Entrada de características
InputSize
— Número de características
entero positivo
Número de características por cada observación de los datos, especificado como un entero positivo.
Para una entrada de imagen, utilice imageInputLayer
.
Normalization
— Normalización de datos
"none"
(predeterminado) | "zerocenter"
| "zscore"
| "rescale-symmetric"
| "rescale-zero-one"
| identificador de función
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 porMean
."zscore"
: restar la media especificada porMean
y dividir porStandardDeviation
."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 porMin
yMax
, 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 porMin
yMax
, 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)
, dondeX
es el dato de entrada y la salidaY
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.
NormalizationDimension
— Dimensión de normalización
"auto"
(predeterminado) | "channel"
| "all"
Dimensión de normalización, especificada como una de las siguientes opciones:
"auto"
: si la opción de entrenamiento es0
(false
) y especifica cualquiera de las estadísticas de normalización (Mean
,StandardDeviation
,Min
oMax
), 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.
Mean
— Media para normalización cero a centro y puntuación Z
[]
(predeterminado) | vector columna | Escalar numérico
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óndlnetwork
cuando la opciónInitialize
es1
(true
) establecen la propiedad en0
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
StandardDeviation
— Desviación estándar para normalización de puntuación Z
[]
(predeterminado) | vector columna | Escalar numérico
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óndlnetwork
cuando la opciónInitialize
es1
(true
) establecen la propiedad en1
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Min
— Valor mínimo para reescalar
[]
(predeterminado) | vector columna | Escalar numérico
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óndlnetwork
cuando la opciónInitialize
es1
(true
) establecen la propiedad en-1
y0
cuandoNormalization
es"rescale-symmetric"
y"rescale-zero-one"
, respectivamente.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Max
— Valor máximo para reescalar
[]
(predeterminado) | vector columna | Escalar numérico
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óndlnetwork
cuando la opciónInitialize
es1
(true
) establecen la propiedad en1
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
SplitComplexInputs
— Marcador para dividir datos de entrada en componentes reales e imaginarios
0
(false
) (predeterminado) | 1
(true
)
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
Name
— Nombre de la capa
""
(predeterminado) | vector de caracteres | escalar de cadena
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
NumInputs
— Número de entradas
0 (predeterminado)
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
InputNames
— Nombres de las entradas
{}
(predeterminado)
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
NumOutputs
— Número de salidas
1
(predeterminado)
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
OutputNames
— Nombres de salida
{'out'}
(predeterminado)
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
Crear una capa de entrada de características
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
Combinar capas de entrada de imagen y de características
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)
Entrenar una red con datos tabulares
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)
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
Formatos de salida de la capa
Las capas en un arreglo de capas o en una gráfica de capas pasan datos a las capas posteriores como objetos dlarray
con formato. El formato de un objeto dlarray
es una cadena de caracteres, en la que cada carácter describe la dimensión correspondiente de los datos. Los formatos constan de uno o más de estos caracteres:
"S"
: espacial"C"
: canal"B"
: lote"T"
: tiempo"U"
: sin especificar
Por ejemplo, puede representar datos tabulares como un arreglo 2D, en el cual la primera y la segunda dimensión se corresponden con el lote y a las dimensiones de canal, respectivamente. Esta representación está en formato "BC"
(lote, canal).
La capa de entrada de una red especifica la distribución de los datos que espera la red. Si tiene datos dispuestos de otra manera, especifique la distribución usando la opción de entrenamiento InputDataFormats
.
La capa introduce arreglos de N por c en la red, donde N y c son el número de observaciones y canales de los datos, respectivamente. Los datos en esta distribución están en formato "BC"
(lote, canal).
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
La generación de código no admite las entradas complejas ni la opción
'SplitComplexInputs'
.
Generación de código de GPU
Genere código CUDA® para GPU NVIDIA® mediante GPU Coder™.
Para generar código CUDA® o C++ mediante GPU Coder™, primero tiene que construir y entrenar una red neuronal profunda. Una vez se haya entrenado y evaluado la red, puede configurar el generador de código para que genere código y despliegue la red neuronal convolucional en plataformas que usen procesadores GPU NVIDIA® o ARM®. Para obtener más información, consulte Deep Learning with GPU Coder (GPU Coder).
La generación de código no admite las entradas complejas ni la opción
'SplitComplexInputs'
.
Historial de versiones
Introducido en R2020b
Consulte también
trainnet
| trainingOptions
| dlnetwork
| fullyConnectedLayer
| image3dInputLayer
| Deep Network Designer | imageInputLayer
| sequenceInputLayer
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)