sequenceInputLayer
Capa de entrada de secuencias
Descripción
Una capa de entrada de secuencias introduce datos secuenciales en una red neuronal y aplica normalización de datos.
Creación
Propiedades
Entrada de secuencias
InputSize
— Tamaño de la entrada
entero positivo | vector de enteros positivos
Tamaño de la entrada, especificado como entero positivo o vector de enteros positivos.
Para entradas de secuencias de vectores,
InputSize
es un escalar correspondiente al número de características.Para entradas de secuencias de imágenes 1D,
InputSize
es un vector de dos elementos[h c]
, dondeh
es la altura de la imagen yc
es el número de canales de la imagen.Para entradas de secuencias de imágenes 2D,
InputSize
es un vector de tres elementos[h w c]
, dondeh
es la altura de la imagen,w
es la anchura de la imagen yc
es el número de canales de la imagen.Para entradas de secuencias de imágenes 3D,
InputSize
es un vector de cuatro elementos[h w d c]
, dondeh
es la altura de la imagen,w
es la anchura de la imagen,d
es la profundidad de la imagen yc
es el número de canales de la imagen.
Para especificar la longitud de secuencia mínima de los datos de entrada, utilice la propiedad MinLength
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
MinLength
— Longitud de secuencia mínima de los datos de entrada
1
(predeterminado) | entero positivo
Longitud de secuencia mínima de los datos de entrada, especificada como un entero positivo. Durante el entrenamiento o la realización de predicciones con la red, si los datos de entrada tienen menos de MinLength
unidades de tiempo, el software devuelve un error.
Cuando cree una red que reduzca la muestra de datos en la dimensión temporal, debe asegurarse de que la red admita los datos de entrenamiento y cualquier dato para predicción. Algunas capas de deep learning requieren que la entrada tenga una longitud de secuencia mínima. Por ejemplo, una capa de convolución 1D requiere que la entrada tenga al menos tantas unidades de tiempo como el tamaño del filtro.
A medida que las series temporales de datos secuenciales se propagan a través de una red, la longitud de la secuencia puede cambiar. Por ejemplo, las operaciones de submuestreo, como las convoluciones 1D, pueden generar datos en menos unidades de tiempo que su entrada. Esto significa que las operaciones de submuestreo pueden hacer que las capas posteriores de la red generen un error porque los datos tienen una longitud de secuencia más corta que la longitud mínima requerida por la capa.
Durante el entrenamiento o la creación de una red, el software verifica automáticamente que las secuencias de longitud 1 puedan propagarse a través de la red. Es posible que algunas redes no admitan secuencias de longitud 1 pero puedan propagar correctamente secuencias de longitudes más largas. Para comprobar que una red admite la propagación de los datos de entrenamiento y de predicción esperados, establezca la propiedad MinLength
en un valor menor o igual que la longitud mínima de los datos y la longitud mínima esperada de los datos de predicción.
Sugerencia
Para evitar que las capas de convolución y agrupación cambien el tamaño de los datos, establezca la opción Padding
de la capa en "same"
o "causal"
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
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 software aplica la normalización a todos los elementos de entrada, incluidos los valores de relleno.
El objeto SequenceInputLayer
almacena esta propiedad como un vector de caracteres o un identificador de función.
Tipos de datos: char
| string
| function_handle
NormalizationDimension
— Dimensión de normalización
"auto"
(predeterminado) | "channel"
| "element"
| "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."element"
: normalización por elemento."all"
: normalizar todos los valores utilizando estadísticas escalares.
El objeto SequenceInputLayer
almacena esta propiedad como un vector de caracteres.
Mean
— Media para normalización cero a centro y puntuación Z
[]
(predeterminado) | Arreglo numérico | Escalar numérico
Media para normalización cero a centro y de puntuación Z, especificada como un arreglo numérico o vacía.
Para entradas de secuencias de vectores,
Mean
debe ser un vector deInputSize
por 1 de medias por canal, un escalar numérico o[]
.Para entradas de secuencias de imágenes 2D,
Mean
debe ser un arreglo numérico del mismo tamaño queInputSize
, un arreglo de 1 por 1 porInputSize(3)
de medias por canal, un escalar numérico o[]
.Para entradas de secuencias de imágenes 3D,
Mean
debe ser un arreglo numérico del mismo tamaño queInputSize
, un arreglo de 1 por 1 por 1 porInputSize(4)
de medias por canal, 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, ignorando los valores de relleno, 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
[]
(predeterminado) | Arreglo numérico | Escalar numérico
Desviación estándar utilizada para la normalización de puntuación Z, especificada como un arreglo numérico, un escalar numérico o vacía.
Para entradas de secuencias de vectores,
StandardDeviation
debe ser un vector deInputSize
por 1 de desviaciones estándar por canal, un escalar numérico o[]
.Para entradas de secuencias de imágenes 2D,
StandardDeviation
debe ser un arreglo numérico del mismo tamaño queInputSize
, un arreglo de 1 por 1 porInputSize(3)
de desviaciones estándar por canal, un escalar numérico o[]
.Para entradas de secuencias de imágenes 3D,
StandardDeviation
debe ser un arreglo numérico del mismo tamaño queInputSize
, un arreglo de 1 por 1 por 1 porInputSize(4)
de desviaciones estándar por canal o un escalar numérico.
Para especificar la propiedad StandardDeviation
, la 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, ignorando los valores de relleno, 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) | Arreglo numérico | Escalar numérico
Valor mínimo para reescalar, especificado como arreglo numérico o vacío.
Para entradas de secuencias de vectores,
Min
debe ser un vector deInputSize
por 1 de medias por canal o un escalar numérico.Para entradas de secuencias de imágenes 2D,
Min
debe ser un arreglo numérico del mismo tamaño queInputSize
, un arreglo de 1 por 1 porInputSize(3)
de mínimos por canal o un escalar numérico.Para entradas de secuencias de imágenes 3D,
Min
debe ser un arreglo numérico del mismo tamaño queInputSize
, un arreglo de mínimos por canal de 1 por 1 por 1 porInputSize(4)
o un escalar numérico.
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, ignorando los valores de relleno, 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) | Arreglo numérico | Escalar numérico
Valor máximo para reescalar, especificado como arreglo numérico o vacío.
Para entradas de secuencias de vectores,
Max
debe ser un vector deInputSize
por 1 de medias por canal o un escalar numérico.Para entradas de secuencias de imágenes 2D,
Max
debe ser un arreglo numérico del mismo tamaño queInputSize
, un arreglo de 1 por 1 porInputSize(3)
de máximos por canal, un escalar numérico o[]
.Para entradas de secuencias de imágenes 3D,
Max
debe ser un arreglo numérico del mismo tamaño queInputSize
, un arreglo de 1 por 1 por 1 porInputSize(4)
de máximos por canal, 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, ignorando los valores de relleno, 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 SequenceInputLayer
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 secuencias
Cree una capa de entrada de secuencias con un tamaño de entrada de 12.
layer = sequenceInputLayer(12)
layer = SequenceInputLayer with properties: Name: '' InputSize: 12 MinLength: 1 SplitComplexInputs: 0 Hyperparameters Normalization: 'none' NormalizationDimension: 'auto'
Incluya una capa de entrada de secuencias en un arreglo Layer
.
inputSize = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(inputSize) lstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numClasses) softmaxLayer]
layers = 4x1 Layer array with layers: 1 '' Sequence Input Sequence input with 12 dimensions 2 '' LSTM LSTM with 100 hidden units 3 '' Fully Connected 9 fully connected layer 4 '' Softmax softmax
Crear una capa de entrada de secuencias para secuencias de imágenes
Cree una capa de entrada de secuencias para secuencias de imágenes RGB 224-224 con el nombre 'seq1'
.
layer = sequenceInputLayer([224 224 3], 'Name', 'seq1')
layer = SequenceInputLayer with properties: Name: 'seq1' InputSize: [224 224 3] MinLength: 1 SplitComplexInputs: 0 Hyperparameters Normalization: 'none' NormalizationDimension: 'auto'
Entrenar la red para clasificar secuencias
Entrene una red de LSTM de deep learning para la clasificación secuencia a etiqueta.
Cargue los datos de ejemplo de WaveformData.mat
. Los datos son un arreglo de celdas de numObservations
por 1 de secuencias, donde numObservations
es el número de secuencias. Cada secuencia es un arreglo numérico de numTimeSteps
por numChannels
, donde numTimeSteps
es el número de unidades de tiempo de la secuencia y numChannels
es el número de canales de la secuencia.
load WaveformData
Visualice algunas de las secuencias en una gráfica.
numChannels = size(data{1},2); idx = [3 4 5 12]; figure tiledlayout(2,2) for i = 1:4 nexttile stackedplot(data{idx(i)},DisplayLabels="Channel "+string(1:numChannels)) xlabel("Time Step") title("Class: " + string(labels(idx(i)))) end
Visualice los nombres de las clases.
classNames = categories(labels)
classNames = 4×1 cell
{'Sawtooth'}
{'Sine' }
{'Square' }
{'Triangle'}
Reserve datos para pruebas. Divida los datos en un conjunto de entrenamiento que contenga el 90% de los datos y en un conjunto de prueba que contenga el 10% 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 = numel(data); [idxTrain,idxTest] = trainingPartitions(numObservations, [0.9 0.1]); XTrain = data(idxTrain); TTrain = labels(idxTrain); XTest = data(idxTest); TTest = labels(idxTest);
Defina la arquitectura de la red de LSTM. Especifique el tamaño de la entrada como el número de canales de los datos de entrada. Especifique una capa de LSTM con 120 unidades ocultas y que genere el último elemento de la secuencia. Por último, incluya una totalmente conectada con un tamaño de salida que coincida con el número de clases, seguida de una capa softmax.
numHiddenUnits = 120; numClasses = numel(categories(TTrain)); layers = [ ... sequenceInputLayer(numChannels) lstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numClasses) softmaxLayer]
layers = 4×1 Layer array with layers: 1 '' Sequence Input Sequence input with 3 dimensions 2 '' LSTM LSTM with 120 hidden units 3 '' Fully Connected 4 fully connected layer 4 '' Softmax softmax
Especifique las opciones de entrenamiento. Entrene usando el solver Adam con una tasa de aprendizaje del 0.01 y un umbral de gradiente de 1. Establezca el número máximo de épocas en 200 y redistribuya el orden de cada época. De forma predeterminada, el software se entrena en una GPU, si se dispone de ella. Utilizar una GPU requiere Parallel Computing Toolbox y un dispositivo GPU compatible. Para obtener información sobre los dispositivos compatibles, consulte GPU Computing Requirements (Parallel Computing Toolbox).
options = trainingOptions("adam", ... MaxEpochs=200, ... InitialLearnRate=0.01,... Shuffle="every-epoch", ... GradientThreshold=1, ... Verbose=false, ... Metrics="accuracy", ... Plots="training-progress");
Entrene la red de LSTM con la función trainnet
. Para la clasificación, utilice la pérdida de entropía cruzada.
net = trainnet(XTrain,TTrain,layers,"crossentropy",options);
Clasifique los datos de prueba. Especifique el mismo tamaño de minilote utilizado para el entrenamiento.
scores = minibatchpredict(net,XTest); YTest = scores2label(scores,classNames);
Calcule la precisión de clasificación de las predicciones.
acc = mean(YTest == TTest)
acc = 0.8700
Muestre los resultados de la clasificación en una gráfica de confusión.
figure confusionchart(TTest,YTest)
Redes de LSTM de clasificación
Para crear una red de LSTM para la clasificación secuencia a etiqueta, cree un arreglo de capas que contenga una capa de entrada de secuencias, una capa de LSTM, una capa totalmente conectada y una capa softmax.
Establezca el tamaño de la capa de entrada de secuencias en el número de características de los datos de entrada. Establezca el tamaño de la capa totalmente conectada en el número de clases. No es necesario especificar la longitud de la secuencia.
Para la capa de LSTM, especifique el número de unidades ocultas y el modo de salida "last"
.
numFeatures = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numClasses) softmaxLayer];
Para ver un ejemplo de cómo entrenar una red de LSTM para una clasificación secuencia a etiqueta y clasificar nuevos datos, consulte Clasificación de secuencias mediante deep learning.
Para crear una red de LSTM para una clasificación secuencia a secuencia, utilice la misma arquitectura que para la clasificación secuencia a etiqueta, pero establezca el modo de salida de la capa de LSTM en "sequence"
.
numFeatures = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,OutputMode="sequence") fullyConnectedLayer(numClasses) softmaxLayer];
Redes de LSTM de regresión
Para crear una red de LSTM para la regresión secuencia a uno, cree un arreglo de capas que contenga una capa de entrada de secuencias, una capa de LSTM y una capa totalmente conectada.
Establezca el tamaño de la capa de entrada de secuencias en el número de características de los datos de entrada. Establezca el tamaño de la capa totalmente conectada en el número de respuestas. No es necesario especificar la longitud de la secuencia.
Para la capa de LSTM, especifique el número de unidades ocultas y el modo de salida "last"
.
numFeatures = 12; numHiddenUnits = 125; numResponses = 1; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numResponses)];
Para crear una red de LSTM para una regresión secuencia a secuencia, utilice la misma arquitectura que para la regresión secuencia a uno, pero establezca el modo de salida de la capa de LSTM en "sequence"
.
numFeatures = 12; numHiddenUnits = 125; numResponses = 1; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,OutputMode="sequence") fullyConnectedLayer(numResponses)];
Para ver un ejemplo de cómo entrenar una red de LSTM para la regresión secuencia a secuencia y predecir nuevos datos, consulte Regresión de secuencia a secuencia mediante deep learning.
Redes de LSTM más profundas
Puede hacer más profundas las redes de LSTM insertando capas de LSTM adicionales con el modo de salida "sequence"
antes de la capa de LSTM. Para evitar un sobreajuste, puede insertar capas de abandono después de las capas de LSTM.
Para redes de clasificación secuencia a etiqueta, el modo de salida de la última capa de LSTM debe ser "last"
.
numFeatures = 12; numHiddenUnits1 = 125; numHiddenUnits2 = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits1,OutputMode="sequence") dropoutLayer(0.2) lstmLayer(numHiddenUnits2,OutputMode="last") dropoutLayer(0.2) fullyConnectedLayer(numClasses) softmaxLayer];
Para redes de clasificación secuencia a secuencia, el modo de salida de la última capa de LSTM debe ser "sequence"
.
numFeatures = 12; numHiddenUnits1 = 125; numHiddenUnits2 = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits1,OutputMode="sequence") dropoutLayer(0.2) lstmLayer(numHiddenUnits2,OutputMode="sequence") dropoutLayer(0.2) fullyConnectedLayer(numClasses) softmaxLayer];
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 de secuencia de vector como un arreglo 3D, en el cual la primera dimensión se corresponde con la dimensión del canal, la segunda dimensión con la del lote y la tercera con la del tiempo. Esta representación está en formato "CBT"
(canal, lote, tiempo).
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
.
Esta tabla describe la distribución esperada de los datos para una red neuronal con una capa de entrada de secuencias.
Datos | Distribución |
---|---|
Secuencias de vectores | Funciones del objeto |
Secuencias de imágenes 1D | Arreglos de h por c por t, donde h y c corresponden a la altura y el número de canales de las imágenes, respectivamente, y t es la longitud de la secuencia. |
Secuencias de imágenes 2D | Arreglos de h por w por c por t, donde h, w y c corresponden a la altura, la anchura y el número de canales de las imágenes, respectivamente, y t es la longitud de la secuencia. |
Secuencias de imágenes 3D | Arreglos de h por w por d por c por t, donde h, w, d y c corresponden a la altura, la anchura, la profundidad y el número de canales de las imágenes 3D, respectivamente, y t es la longitud de la secuencia. |
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Para entradas secuenciales de vector, el número de características debe ser una constante durante la generación de código.
Puede generar código C o C++ que no dependa de bibliotecas de deep learning de terceros para datos de entrada con cero, una, dos o tres dimensiones espaciales.
Para ARM® Compute e Intel® MKL-DNN, los datos de entrada deben contener cero o dos dimensiones espaciales.
La generación de código no admite el tipo de datos
'Normalization'
especificado usando un identificador de función.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™.
Notas y limitaciones de uso:
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).
Puede generar código CUDA que sea independiente de bibliotecas de deep learning para datos de entrada con cero, una, dos o tres dimensiones espaciales.
Puede generar código que aproveche la biblioteca de la red neuronal profunda (cuDNN) NVIDIACUDA o la biblioteca de inferencias de alto rendimiento NVIDIATensorRT™.
La biblioteca cuDNN es compatible con secuencias de vectores y de imágenes 2D. La biblioteca TensorRT es solo compatible con secuencias de entrada de vectores.
Todas las dimensiones espaciales y de canal de la entrada deben ser constantes durante la generación del código. Por ejemplo,
Para entradas secuenciales de vector, el número de características debe ser una constante durante la generación de código.
Para entradas secuenciales de imágenes, la altura, la anchura y el número de canales deben ser una constante durante la generación de código.
La generación de código no admite el tipo de datos
'Normalization'
especificado usando un identificador de función.La generación de código no admite las entradas complejas ni la opción
'SplitComplexInputs'
.
Historial de versiones
Introducido en R2017bR2024a: No se recomienda usar los objetos DAGNetwork
y SeriesNetwork
A partir de la versión R2024a, los objetos DAGNetwork
y SeriesNetwork
no están recomendados. En su lugar, utilice los objetos dlnetwork
.
No está previsto eliminar el soporte para los objetos DAGNetwork
y SeriesNetwork
. Sin embargo, en su lugar se recomiendan los objetos dlnetwork
, que tienen estas ventajas:
Los objetos
dlnetwork
son un tipo de datos unificado que admite la creación de redes, la predicción, el entrenamiento integrado, la visualización, la compresión, la verificación y los bucles de entrenamiento personalizados.Los objetos
dlnetwork
admiten una gama más amplia de arquitecturas de red que puede crear o importar desde plataformas externas.La función
trainnet
admite objetosdlnetwork
, lo que le permite especificar fácilmente funciones de pérdida. Puede seleccionar entre funciones de pérdida integradas o especificar una función de pérdida personalizada.Entrenar y predecir con los objetos
dlnetwork
suele ser más rápido que los flujos de trabajoLayerGraph
ytrainNetwork
.
Para convertir un objeto DAGNetwork
o SeriesNetwork
entrenado en un objeto dlnetwork
, use la función dag2dlnetwork
.
Las capas de entrada de secuencias en un objeto dlnetwork
esperan datos dispuestos de manera diferente que las capas de entrada de secuencias en objetos DAGNetwork
o SeriesNetwork
. Para entradas de secuencias de vectores, las funciones de objetos DAGNetwork
y SeriesNetwork
esperan matrices de c por t, donde c es el número de características de las secuencias y t es la longitud de la secuencia. Para entradas de secuencias de vectores, las funciones de objeto dlnetwork
esperan matrices de t por c, donde t es la longitud de la secuencia y c es el número de características de las secuencias.
R2020a: trainNetwork
ignora los valores de relleno al calcular las estadísticas de normalización
A partir de la versión R2020a, trainNetwork
ignora los valores de relleno al calcular las estadísticas de normalización. Esto significa que la opción Normalization
en la sequenceInputLayer
ahora hace que el entrenamiento sea invariable frente a las operaciones con datos; por ejemplo, la normalización 'zerocenter'
ahora implica que los resultados del entrenamiento son invariables frente a la media de los datos.
Si entrena en secuencias con relleno, los factores de normalización calculados pueden ser distintos en versiones anteriores y pueden producir resultados diferentes.
R2019b: sequenceInputLayer
, de forma predeterminada, utiliza la normalización por canal para la normalización cero a centro
A partir de la versión R2019b, sequenceInputLayer
, de forma predeterminada, utiliza la normalización por canal para la normalización cero a centro. En versiones anteriores, esta capa utiliza la normalización por elemento. Para reproducir este comportamiento, establezca la opción NormalizationDimension
de esta capa en 'element'
.
Consulte también
trainnet
| trainingOptions
| dlnetwork
| minibatchpredict
| predict
| scores2label
| lstmLayer
| bilstmLayer
| gruLayer
| sequenceFoldingLayer
| flattenLayer
| featureInputLayer
| Deep Network Designer
Temas
- Clasificación de secuencias mediante deep learning
- Pronóstico de series de tiempo mediante deep learning
- Clasificación secuencia a secuencia mediante deep learning
- Classify Videos Using Deep Learning
- Visualizar activaciones de redes de LSTM
- Redes neuronales de memoria de corto-largo plazo
- Deep learning en MATLAB
- Lista de capas de deep learning
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)