activations
Calcular las activaciones de las capas de una red de deep learning
Sintaxis
Descripción
Puede calcular las activaciones de las capas de una red de deep learning tanto en una CPU como en una GPU. Utilizar una GPU requiere una licencia de Parallel Computing Toolbox™ y un dispositivo GPU compatible. Para obtener información sobre los dispositivos compatibles, consulte GPU Computing Requirements (Parallel Computing Toolbox). Especifique los requisitos de hardware mediante el argumento nombre-valor ExecutionEnvironment
.
Para calcular activaciones mediante una SeriesNetwork
o una DAGNetwork
entrenadas, use la función activations
. Para calcular activaciones de un objeto dlnetwork
, use la función forward
o predict
, y especifique la opción Outputs
.
devuelve activaciones de red con opciones adicionales especificadas por uno o más argumentos de par nombre-valor. Por ejemplo, act
= activations(___,Name=Value
)OutputAs="rows"
especifica el formato de salida de la activación como "rows"
. Use esta sintaxis con cualquiera de los argumentos de entrada de las sintaxis anteriores. Especifique los argumentos nombre-valor después del resto de los argumentos de entrada.
Ejemplos
Extracción de características con SqueezeNet
Este ejemplo muestra cómo extraer características de imagen aprendidas de una red neuronal convolucional preentrenada y cómo utilizar esas características para entrenar un clasificador de imágenes.
La extracción de características es la forma más rápida y sencilla de utilizar la capacidad de representación de las redes profundas preentrenadas. Por ejemplo, puede entrenar una máquina de vectores de soporte (SVM) utilizando fitcecoc
(Statistics and Machine Learning Toolbox™) en las características extraídas. Como la extracción de características solo requiere una única pasada por los datos, es un buen punto de partida si no tiene una GPU con la que acelerar el entrenamiento de la red.
Cargar datos
Descomprima y cargue las imágenes de muestra como un almacén de datos de imágenes. imageDatastore
etiqueta de forma automática las imágenes basándose en los nombres de las carpetas y almacena los datos como un objeto ImageDatastore
. Un almacén de datos de imágenes permite almacenar un gran volumen de datos de imágenes, incluidos los que no caben en la memoria. Divida los datos en un 70% de datos de entrenamiento y un 30% de datos de prueba.
unzip("MerchData.zip"); imds = imageDatastore("MerchData", ... IncludeSubfolders=true, ... LabelSource="foldernames"); [imdsTrain,imdsTest] = splitEachLabel(imds,0.7,"randomized");
Este pequeño conjunto de datos ahora tiene 55 imágenes de entrenamiento y 20 imágenes de validación. Visualice algunas imágenes de muestra.
numImagesTrain = numel(imdsTrain.Labels);
idx = randperm(numImagesTrain,16);
I = imtile(imds,"Frames",idx);
figure
imshow(I)
Cargar una red preentrenada
Cargue una red SqueezeNet preentrenada. SqueezeNet se ha entrenado con más de un millón de imágenes y puede clasificar imágenes en 1000 categorías de objetos, por ejemplo, teclado, ratón, lápiz y muchos animales. Como resultado, el modelo ha aprendido representaciones ricas en características para una amplia gama de imágenes.
net = squeezenet;
Analice la arquitectura de red.
analyzeNetwork(net)
La primera capa, la de entrada de imágenes, requiere imágenes de entrada de un tamaño de 227 por 227 por 3, donde 3 es el número de canales de color.
inputSize = net.Layers(1).InputSize
inputSize = 1×3
227 227 3
Extraer características de imágenes
La red construye una representación jerárquica de las imágenes de entrada. Las capas más profundas contienen características de nivel más alto construidas con las características de nivel más bajo de capas anteriores. Para obtener las representaciones de las características de las imágenes de entrenamiento y de prueba, utilice activations
en la capa de agrupación promedio global "pool10"
. Para obtener una representación de nivel más bajo de las imágenes, utilice una capa anterior de la red.
La red requiere imágenes de entrada de un tamaño de 227 por 227 por 3, pero las imágenes de los almacenes de datos de imágenes tienen diferentes tamaños. Para cambiar automáticamente el tamaño de las imágenes de entrenamiento y de prueba antes de introducirlas en la red, cree almacenes de datos de imágenes aumentados, especifique el tamaño de imagen deseado y utilice estos almacenes de datos como argumentos de entrada de activations
.
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain); augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest); layer = "pool10"; featuresTrain = activations(net,augimdsTrain,layer,OutputAs="rows"); featuresTest = activations(net,augimdsTest,layer,OutputAs="rows");
Extraiga las etiquetas de clase de los datos de entrenamiento y de prueba.
TTrain = imdsTrain.Labels; TTest = imdsTest.Labels;
Ajustar el clasificador de imágenes
Utilice las características extraídas de las imágenes de entrenamiento como variables predictoras y ajuste una máquina de vectores de soporte (SVM) multiclase con fitcecoc
(Statistics and Machine Learning Toolbox).
mdl = fitcecoc(featuresTrain,TTrain);
Clasificar imágenes de prueba
Clasifique las imágenes de prueba con el modelo de SVM entrenado y las características extraídas de las imágenes de prueba.
YPred = predict(mdl,featuresTest);
Muestre cuatro imágenes de prueba de muestra con etiquetas predichas.
idx = [1 5 10 15]; figure for i = 1:numel(idx) subplot(2,2,i) I = readimage(imdsTest,idx(i)); label = YPred(idx(i)); imshow(I) title(label) end
Calcule la precisión de clasificación en el conjunto de prueba. La precisión es la fracción de etiquetas que la red predice correctamente.
accuracy = mean(YPred == TTest)
accuracy = 0.9500
Esta SVM tiene una precisión alta. Si la precisión no es lo suficientemente alta utilizando la extracción de características, pruebe la transferencia del aprendizaje en su lugar.
Argumentos de entrada
net
— Red entrenada
objeto SeriesNetwork
| objeto DAGNetwork
Red entrenada, especificada como un objeto SeriesNetwork
o DAGNetwork
. Puede obtener una red entrenada importando una red preentrenada (por ejemplo, utilizando la función googlenet
) o entrenando su propia red mediante trainNetwork
.
images
— Datos de imágenes
almacén de datos | Arreglo numérico | tabla
Datos de imágenes, especificados como una de las siguientes opciones:
Tipo de datos | Descripción | Ejemplo de uso | |
---|---|---|---|
Almacén de datos | ImageDatastore | Almacén de datos de imágenes guardadas en disco | Hacer predicciones con imágenes guardadas en disco, donde las imágenes tienen el mismo tamaño. Si las imágenes tienen diferentes tamaños, use un objeto |
AugmentedImageDatastore | Almacén de datos que aplica transformaciones geométricas afines aleatorias, incluyendo cambio de tamaño, rotación, reflexión, estiramiento y traslación | Hacer predicciones con imágenes guardadas en disco, donde las imágenes tienen distinto tamaño. | |
TransformedDatastore | Almacén de datos que transforma lotes de datos leídos de un almacén de datos subyacente mediante una función de transformación personalizada |
| |
CombinedDatastore | Almacén de datos que lee de dos o más almacenes de datos subyacentes |
| |
Almacén de datos de minilotes personalizado | Almacén de datos personalizado que devuelve minilotes de datos | Hacer predicciones usando datos en un formato no compatible con otros almacenes de datos. Para obtener más detalles, consulte Develop Custom Mini-Batch Datastore. | |
Arreglo numérico | Imágenes especificadas como arreglo numérico | Hacer predicciones usando datos que quepan en la memoria y no requieran procesamiento adicional, como un cambio de tamaño. | |
Tabla | Imágenes especificadas como tabla | Hacer predicciones usando datos guardados en una tabla. |
Cuando utiliza un almacén de datos con redes con varias entradas, el almacén de datos debe ser un objeto TransformedDatastore
o CombinedDatastore
.
Sugerencia
Para secuencias de imágenes, por ejemplo, datos de vídeo, use el argumento de entrada sequences
.
Almacén de datos
Los almacenes de datos leen minilotes de imágenes y respuestas. Use almacenes de datos cuando tenga datos que no caben en la memoria o cuando quiera cambiar el tamaño de los datos de entrada.
Estos almacenes de datos son directamente compatibles con activations
para datos de imágenes:
Almacén de datos de minilotes personalizado. Para obtener más detalles, consulte Develop Custom Mini-Batch Datastore.
Tenga en cuenta que los objetos ImageDatastore
permiten leer lotes de archivos de imágenes JPG o PNG mediante precarga. Si utiliza una función personalizada para leer las imágenes, los objetos ImageDatastore
no realizan la precarga.
Sugerencia
Use augmentedImageDatastore
para preprocesar eficiente de las imágenes para deep learning, incluyendo el cambio de tamaño de las imágenes.
No use la opción readFcn
de la función imageDatastore
para preprocesar o cambiar el tamaño, ya que esta opción suele ser bastante más lenta.
Puede utilizar otros almacenes de datos integrados para hacer predicciones mediante las funciones transform
y combine
. Estas funciones pueden convertir los datos leídos de almacenes de datos al formato requerido por classify
.
El formato requerido de la salida del almacén de datos depende de la arquitectura de red.
Arquitectura de red | Salida del almacén de datos | Ejemplo de salida |
---|---|---|
Entrada única | Tabla o arreglo de celdas, donde la primera columna especifica los predictores. Los elementos de la tabla deben ser escalares, vectores fila o arreglos de celdas de 1 por 1 que contengan un arreglo numérico. Los almacenes de datos personalizados deben producir tablas como salida. | data = read(ds) data = 4×1 table Predictors __________________ {224×224×3 double} {224×224×3 double} {224×224×3 double} {224×224×3 double} |
data = read(ds) data = 4×1 cell array {224×224×3 double} {224×224×3 double} {224×224×3 double} {224×224×3 double} | ||
Varias entradas | Arreglo de celdas con al menos Las primeras El orden de las entradas se indica mediante la propiedad | data = read(ds) data = 4×2 cell array {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} |
El formato de los predictores depende del tipo de datos.
Datos | Formato |
---|---|
Imágenes 2D | Arreglo numérico de h por w por c, donde h, w y c son la altura, la anchura y el número de canales de las imágenes, respectivamente |
Imágenes 3D | Arreglo numérico de h por w por d por c, donde h, w, d y c son la altura, la anchura, la profundidad y el número de canales de las imágenes, respectivamente |
Para obtener más información, consulte Datastores for Deep Learning.
Arreglo numérico
Para datos que quepan en la memoria y no requieran procesamiento adicional, como aumento, puede especificar un conjunto de datos de imágenes como arreglo numérico.
El tamaño y la forma del arreglo numérico dependen del tipo de datos de imágenes.
Datos | Formato |
---|---|
Imágenes 2D | Arreglo numérico de h por w por c por N, en el que h, w y c son la altura, la anchura y el número de canales de las imágenes, respectivamente, y N es el número de imágenes |
Imágenes 3D | Arreglo numérico de h por w por d por c por N, en el que h, w, d y c son la altura, la anchura, la profundidad y el número de canales de las imágenes, respectivamente, y N es el número de imágenes |
Tabla
Como alternativa a los almacenes de datos o arreglos numéricos, también puede especificar imágenes en una tabla.
Cuando especifica imágenes en una tabla, cada fila de la tabla corresponde a una observación.
Para entradas de imagen, los predictores deben estar en la primera columna de la tabla, especificados como una de las siguientes opciones:
Ruta de archivo absoluta o relativa a una imagen, especificada como vector de caracteres.
Arreglo de celdas de 1 por 1 con un arreglo numérico de h por w por c que represente una imagen 2D, donde h, w y c corresponden a la altura, la anchura y el número de canales de la imagen, respectivamente.
Sugerencia
Para introducir datos de valores complejos en una red neuronal, la opción SplitComplexInputs
de la capa de entrada debe ser 1
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| table
Soporte de números complejos: Sí
sequences
— Secuencia o datos de series de tiempo
almacén de datos | arreglo de celdas de arreglos numéricos | Arreglo numérico
Secuencia o datos de series de tiempo, especificados como una de las siguientes opciones:
Tipo de datos | Descripción | Ejemplo de uso | |
---|---|---|---|
Almacén de datos | TransformedDatastore | Almacén de datos que transforma lotes de datos leídos de un almacén de datos subyacente mediante una función de transformación personalizada |
|
CombinedDatastore | Almacén de datos que lee de dos o más almacenes de datos subyacentes |
| |
Almacén de datos de minilotes personalizado | Almacén de datos personalizado que devuelve minilotes de datos | Hacer predicciones usando datos en un formato no compatible con otros almacenes de datos. Para obtener más detalles, consulte Develop Custom Mini-Batch Datastore. | |
Arreglo numérico o de celdas | Una única secuencia especificada como arreglo numérico o un conjunto de datos de secuencias especificado como arreglo de celdas de arreglos numéricos | Hacer predicciones usando datos que quepan en la memoria y no requieran procesamiento adicional, como transformaciones personalizadas. |
Almacén de datos
Los almacenes de datos leen minilotes de secuencias y respuestas. Use almacenes de datos cuando tenga datos que no caben en la memoria o cuando quiera aplicar transformaciones a los datos.
Estos almacenes de datos son directamente compatibles con activations
para datos secuenciales:
Almacén de datos de minilotes personalizado. Para obtener más detalles, consulte Develop Custom Mini-Batch Datastore.
Puede utilizar otros almacenes de datos integrados para hacer predicciones mediante las funciones transform
y combine
. Estas funciones pueden convertir los datos leídos de almacenes de datos al formato de tabla o arreglo de celdas requerido por activations
. Por ejemplo, puede transformar y combinar datos leídos de arreglos en memoria y archivos CVS mediante un objeto ArrayDatastore
y un objeto TabularTextDatastore
, respectivamente.
El almacén de datos debe devolver datos en una tabla o arreglo de celdas. Los almacenes de datos de minilotes personalizados deben producir tablas como salida.
Salida del almacén de datos | Ejemplo de salida |
---|---|
Tabla | data = read(ds) data = 4×2 table Predictors __________________ {12×50 double} {12×50 double} {12×50 double} {12×50 double} |
Arreglo de celdas | data = read(ds) data = 4×2 cell array {12×50 double} {12×50 double} {12×50 double} {12×50 double} |
El formato de los predictores depende del tipo de datos.
Datos | Formato de los predictores |
---|---|
Secuencia de vector | Matriz de c por s, donde c es el número de características de la secuencia y s es la longitud de la secuencia |
Secuencia de imágenes 1D | Arreglo de h por c por s, donde h y c corresponden a la altura y el número de canales de la imagen, respectivamente, y s es la longitud de la secuencia. Cada secuencia del minilote debe tener la misma longitud de secuencia. |
Secuencia de imágenes 2D | Arreglo de h por w por c por s, donde h, w y c corresponden a la altura, la anchura y el número de canales de la imagen, respectivamente, y s es la longitud de la secuencia. Cada secuencia del minilote debe tener la misma longitud de secuencia. |
Secuencia de imágenes 3D | Arreglo de h por w por d por c por s, donde h, w, d y c corresponden a la altura, la anchura, la profundidad y el número de canales de la imagen, respectivamente, y s es la longitud de la secuencia. Cada secuencia del minilote debe tener la misma longitud de secuencia. |
Para predictores devueltos en tablas, los elementos deben contener un escalar numérico, un vector fila numérico o un arreglo de celdas de 1 por 1 con un arreglo numérico.
Para obtener más información, consulte Datastores for Deep Learning.
Arreglo numérico o de celdas
Para datos que quepan en la memoria y no requieran procesamiento adicional, como transformaciones personalizadas, puede especificar una única secuencia como arreglo numérico o un conjunto de datos de secuencias como un arreglo de celdas de arreglos numéricos.
Para entradas en forma de arreglo de celdas, el arreglo de celdas debe ser un arreglo de celdas de N por 1 de arreglos numéricos, donde N es el número de observaciones. El tamaño y la forma del arreglo numérico que representa una secuencia depende del tipo de datos secuenciales.
Entrada | Descripción |
---|---|
Secuencias de vector | Matrices de c por s, donde c es el número de características de las secuencias y s es la longitud de la secuencia |
Secuencias de imágenes 1D | Arreglos de h por c por s, donde h y c corresponden a la altura y el número de canales de las imágenes, respectivamente, y s es la longitud de la secuencia |
Secuencias de imágenes 2D | Arreglos de h por w por c por s, donde h, w y c corresponden a la altura, la anchura y el número de canales de las imágenes, respectivamente, y s es la longitud de la secuencia |
Secuencias de imágenes 3D | Arreglos de h por w por d por c por s, 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 s es la longitud de la secuencia |
Sugerencia
Para introducir datos de valores complejos en una red neuronal, la opción SplitComplexInputs
de la capa de entrada debe ser 1
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| cell
Soporte de números complejos: Sí
features
— Datos de características
almacén de datos | Arreglo numérico | tabla
Datos de características, especificados como una de las siguientes opciones:
Tipo de datos | Descripción | Ejemplo de uso | |
---|---|---|---|
Almacén de datos | TransformedDatastore | Almacén de datos que transforma lotes de datos leídos de un almacén de datos subyacente mediante una función de transformación personalizada |
|
CombinedDatastore | Almacén de datos que lee de dos o más almacenes de datos subyacentes |
| |
Almacén de datos de minilotes personalizado | Almacén de datos personalizado que devuelve minilotes de datos | Hacer predicciones usando datos en un formato no compatible con otros almacenes de datos. Para obtener más detalles, consulte Develop Custom Mini-Batch Datastore. | |
Tabla | Datos de características especificados como una tabla | Hacer predicciones usando datos guardados en una tabla. | |
Arreglo numérico | Datos de características especificados como un arreglo numérico | Hacer predicciones usando datos que quepan en la memoria y no requieran procesamiento adicional, como transformaciones personalizadas. |
Almacén de datos
Los almacenes de datos leen minilotes de datos de características y respuestas. Use almacenes de datos cuando tenga datos que no caben en la memoria o cuando quiera aplicar transformaciones a los datos.
Estos almacenes de datos son directamente compatibles con activations
para datos de características:
Almacén de datos de minilotes personalizado. Para obtener más detalles, consulte Develop Custom Mini-Batch Datastore.
Puede utilizar otros almacenes de datos integrados para hacer predicciones mediante las funciones transform
y combine
. Estas funciones pueden convertir los datos leídos de almacenes de datos al formato de tabla o arreglo de celdas requerido por activations
. Para obtener más información, consulte Datastores for Deep Learning.
Para redes con varias entradas, el almacén de datos debe ser un objeto TransformedDatastore
o CombinedDatastore
.
El almacén de datos debe devolver datos en una tabla o arreglo de celdas. Los almacenes de datos de minilotes personalizados deben producir tablas como salida. El formato de la salida del almacén de datos depende de la arquitectura de red.
Arquitectura de red | Salida del almacén de datos | Ejemplo de salida |
---|---|---|
Capa de entrada única | Tabla o arreglo de celdas con al menos una columna, donde la primera columna especifica los predictores. Los elementos de la tabla deben ser escalares, vectores fila o arreglos de celdas de 1 por 1 que contengan un arreglo numérico. Los almacenes de datos de minilotes personalizados deben producir tablas como salida. | Tabla para red con una entrada: data = read(ds) data = 4×2 table Predictors __________________ {24×1 double} {24×1 double} {24×1 double} {24×1 double} |
Arreglo de celdas para red con una entrada: data = read(ds) data = 4×1 cell array {24×1 double} {24×1 double} {24×1 double} {24×1 double} | ||
Capas de entrada múltiples | Arreglo de celdas con al menos Las primeras El orden de las entradas se indica mediante la propiedad | Arreglo de celdas para red con dos entradas: data = read(ds) data = 4×3 cell array {24×1 double} {28×1 double} {24×1 double} {28×1 double} {24×1 double} {28×1 double} {24×1 double} {28×1 double} |
Los predictores deben ser vectores columna de c por 1, donde c es el número de características.
Para obtener más información, consulte Datastores for Deep Learning.
Tabla
Para datos de características que quepan en la memoria y no requieran procesamiento adicional, como transformaciones personalizadas, puede especificar datos de características y respuestas como una tabla.
Cada fila de la tabla corresponde a una observación. La disposición de los predictores en las columnas de la tabla depende del tipo de tarea.
Tarea | Predictores |
---|---|
Clasificación de características | Características especificadas en una o más columnas como escalares. |
Arreglo numérico
Para datos de características que quepan en la memoria y no requieran procesamiento adicional, como transformaciones personalizadas, puede especificar datos de características como un arreglo numérico.
El arreglo numérico debe ser un arreglo numérico de N por numFeatures
, donde N es el número de observaciones y numFeatures
es el número de características de los datos de entrada.
Sugerencia
Para introducir datos de valores complejos en una red neuronal, la opción SplitComplexInputs
de la capa de entrada debe ser 1
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| table
Soporte de números complejos: Sí
X1,...,XN
— Arreglos numéricos o de celdas para redes con varias entradas
Arreglo numérico | arreglo de celdas
Arreglos numéricos o de celdas para redes con varias entradas.
Para entradas de predictor de imagen, secuencia y característica, el formato de los predictores debe coincidir con los formatos descritos en las descripciones de los argumentos images
, sequences
o features
, respectivamente.
Para ver un ejemplo de cómo entrenar una red con varias entradas, consulte Train Network on Image and Feature Data.
Para introducir datos de valores complejos en una red neuronal, la opción SplitComplexInputs
de la capa de entrada debe ser 1
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| cell
Soporte de números complejos: Sí
mixed
— Datos mezclados
TransformedDatastore
| CombinedDatastore
| almacén de datos de minilotes personalizado
Datos mezclados, especificados como una de las siguientes opciones:
Tipo de datos | Descripción | Ejemplo de uso |
---|---|---|
TransformedDatastore | Almacén de datos que transforma lotes de datos leídos de un almacén de datos subyacente mediante una función de transformación personalizada |
|
CombinedDatastore | Almacén de datos que lee de dos o más almacenes de datos subyacentes |
|
Almacén de datos de minilotes personalizado | Almacén de datos personalizado que devuelve minilotes de datos | Hacer predicciones usando datos en un formato no compatible con otros almacenes de datos. Para obtener más detalles, consulte Develop Custom Mini-Batch Datastore. |
Puede utilizar otros almacenes de datos integrados para hacer predicciones mediante las funciones transform
y combine
. Estas funciones pueden convertir los datos leídos de almacenes de datos al formato de tabla o arreglo de celdas requerido por activations
. Para obtener más información, consulte Datastores for Deep Learning.
El almacén de datos debe devolver datos en una tabla o arreglo de celdas. Los almacenes de datos de minilotes personalizados deben producir tablas como salida. El formato de la salida del almacén de datos depende de la arquitectura de red.
Salida del almacén de datos | Ejemplo de salida |
---|---|
Arreglo de celdas con El orden de las entradas se indica mediante la propiedad | data = read(ds) data = 4×3 cell array {24×1 double} {28×1 double} {24×1 double} {28×1 double} {24×1 double} {28×1 double} {24×1 double} {28×1 double} |
Para entradas de predictor de imagen, secuencia y característica, el formato de los predictores debe coincidir con los formatos descritos en las descripciones de los argumentos images
, sequences
o features
, respectivamente.
Para ver un ejemplo de cómo entrenar una red con varias entradas, consulte Train Network on Image and Feature Data.
Sugerencia
Para convertir un arreglo numérico a un almacén de datos, use arrayDatastore
.
layer
— Capa de la que extraer activaciones
índice numérico | vector de caracteres
Capa de la que extraer activaciones, especificada como un índice numérico o un vector de caracteres.
Para calcular activaciones de un objeto SeriesNetwork
, especifique la capa mediante su índice numérico o como un vector de caracteres correspondiente al nombre de la capa.
Para calcular activaciones de un objeto DAGNetwork
, especifique la capa como el vector de caracteres correspondiente al nombre de la capa. Si la capa cuenta con varias salidas, especifique la capa y la salida como nombre de la capa, seguido por el carácter "/", seguido por el nombre de la salida de la capa. Es decir, layer
tiene el formato 'layerName/outputName'
.
Ejemplo: 3
Ejemplo: 'conv1'
Ejemplo: 'mpool/out'
Argumentos de par nombre-valor
Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN
, donde Name
es el nombre del argumento y Value
es el valor correspondiente. Los argumentos de nombre-valor deben aparecer después de otros argumentos. Sin embargo, el orden de los pares no importa.
En las versiones anteriores a la R2021a, use comas para separar cada nombre y valor, y encierre Name
entre comillas.
Ejemplo: MiniBatchSize=256
especifica el tamaño de minilote como 256.
OutputAs
— Formato de las activaciones de salida
"channels"
(predeterminado) | "rows"
| "columns"
Formato de las activaciones de salida, especificado como "channels"
, "rows"
o "columns"
. Para ver descripciones de los formatos de salida, consulte act
.
Para entradas de imagen, si la opción OutputAs
es "channels"
, las imágenes de los datos de entrada pueden ser mayores que el tamaño de entrada de la capa de entrada de imagen de la red. Para otros formatos de salida, el tamaño de las imágenes de la entrada debe coincidir con el tamaño de entrada de la capa de entrada de imagen de la red.
MiniBatchSize
— Tamaño de los minilotes
128
(predeterminado) | entero positivo
Tamaño de los minilotes utilizados durante la predicción, especificado como un entero positivo. Un tamaño de minilote mayor requiere más memoria, pero puede proporcionar predicciones más rápidas.
SequenceLength
— Opción para rellenar o truncar secuencias
"longest"
(predeterminado) | "shortest"
| entero positivo
Opción para rellenar, truncar o dividir secuencias de entrada, especificada como una de las siguientes opciones:
"longest"
: rellenar secuencias en cada minilote para tener la misma longitud que la secuencia más larga. Esta opción no descarta ningún dato, aunque el relleno puede introducir ruido a la red neuronal."shortest"
: truncar secuencias en cada minilote para tener la misma longitud que la secuencia más corta. Esta opción garantiza que no se añade relleno, a costa de descartar datos.Entero positivo: para cada minilote, rellenar las secuencias hasta la longitud de la secuencia más larga del minilote y, después, dividir las secuencias en secuencias más pequeñas de la longitud especificada. Si se produce la división, el software crea minilotes adicionales. Si la longitud de secuencia especificada no divide uniformemente las longitudes de secuencia de los datos, entonces los minilotes que contienen las unidades de tiempo finales de las secuencias tienen una longitud más corta que la longitud de secuencia especificada. Utilice esta opción si las secuencias completas no caben en la memoria. Como alternativa, intente reducir el número de secuencias por minilote ajustando la opción
MiniBatchSize
a un valor inferior.
Para obtener más información sobre el efecto del relleno, el truncado y la división de las secuencias de entrada, consulte Relleno, truncamiento y división de secuencias.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
SequencePaddingValue
— Valor para rellenar secuencias
0
(predeterminado) | escalar
Valor con el que rellenar secuencias de entrada, especificado como un escalar.
La opción solo es válida cuando SequenceLength
es "longest"
o un entero positivo. No rellene secuencias con NaN
, porque haciéndolo se pueden propagar errores por la red neuronal.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
SequencePaddingDirection
— Dirección de relleno o truncado
"right"
(predeterminado) | "left"
Dirección de relleno o truncado, especificada como una de las siguientes opciones:
"right"
: rellenar o truncar secuencias a la derecha. Las secuencias comienzan en la misma unidad de tiempo y el software trunca o añade relleno al final de las secuencias."left"
: rellenar o truncar secuencias a la izquierda. El software trunca o añade relleno al principio de las secuencias para que dichas secuencias finalicen en la misma unidad de tiempo.
Dado que las capas recurrentes procesan los datos secuenciales en una unidad de tiempo cada vez, cuando la propiedad OutputMode
de la capa recurrente es 'last'
, cualquier relleno en las unidades de tiempo finales puede influir negativamente en la salida de la capa. Para rellenar o truncar datos secuenciales a la izquierda, establezca la opción SequencePaddingDirection
en "left"
.
Para redes neuronales secuencia a secuencia (cuando la propiedad OutputMode
es 'sequence'
para cada capa recurrente), cualquier relleno en las primeras unidades de tiempo puede influir negativamente en las predicciones para unidades de tiempo anteriores. Para rellenar o truncar datos secuenciales a la derecha, establezca la opción SequencePaddingDirection
en "right"
.
Para obtener más información sobre el efecto del relleno, el truncado y la división de las secuencias de entrada, consulte Relleno, truncamiento y división de secuencias.
Acceleration
— Optimización de rendimiento
"auto"
(predeterminado) | "mex"
| "none"
Optimización de rendimiento, especificada como una de las siguientes opciones:
"auto"
: aplicar automáticamente un número de optimizaciones adecuado para la red de entrada y los recursos de hardware."mex"
: compilar y ejecutar una función MEX. Esta opción solo está disponible cuando usa una GPU. Utilizar una GPU requiere una licencia de Parallel Computing Toolbox y un dispositivo GPU compatible. Para obtener información sobre los dispositivos compatibles, consulte GPU Computing Requirements (Parallel Computing Toolbox). Si no está disponible Parallel Computing Toolbox o una GPU adecuada, el software devuelve un error."none"
: deshabilitar toda la aceleración.
Si Acceleration
es "auto"
, MATLAB® aplica un número de optimizaciones compatibles y no genera una función MEX.
Las opciones "auto"
y "mex"
pueden ofrecer beneficios de rendimiento a costa de un mayor tiempo de ejecución inicial. Las siguientes llamadas con parámetros compatibles son más rápidas. Utilice la optimización de rendimiento cuando planee llamar a la función varias veces con nuevos datos de entrada.
La opción "mex"
genera y ejecuta una función MEX basada en la red y en parámetros utilizados en la llamada a la función. Puede tener varias funciones MEX asociadas a una única red al mismo tiempo. Borrando la variable de red también se borra cualquier función MEX asociada a esa red.
La opción "mex"
es compatible con redes que contienen las capas que aparecen en la página Supported Layers (GPU Coder), excepto los objetos sequenceInputLayer
.
La opción "mex"
está disponible cuando usa una única GPU.
Para usar la opción "mex"
, debe tener instalado un compilador C/C++ y el paquete de soporte GPU Coder™ Interface for Deep Learning. Instale el paquete de soporte usando Add-On Explorer en MATLAB. Para obtener instrucciones de configuración, consulte MEX Setup (GPU Coder). No se requiere GPU Coder.
Para las redes cuantificadas, la opción "mex"
requiere una GPU NVIDIA® habilitada para CUDA® con capacidad de cálculo 6.1, 6.3 o superior.
MATLAB Compiler™ no es compatible con el despliegue de redes cuando utiliza la opción "mex"
.
ExecutionEnvironment
— Recurso de hardware
"auto"
(predeterminado) | "gpu"
| "cpu"
| "multi-gpu"
| "parallel"
Recurso de hardware, especificado como una de las siguientes opciones:
"auto"
: usar una GPU si hay alguna disponible; si no, usar la CPU."gpu"
: usar la GPU. Utilizar una GPU requiere una licencia de Parallel Computing Toolbox y un dispositivo GPU compatible. Para obtener información sobre los dispositivos compatibles, consulte GPU Computing Requirements (Parallel Computing Toolbox). Si no está disponible Parallel Computing Toolbox o una GPU adecuada, el software devuelve un error."cpu"
: usar la CPU."multi-gpu"
: usar varias GPU en una máquina, usando un grupo paralelo local basado en su perfil de cluster predeterminado. Si no hay grupo paralelo actual, el software inicia un grupo paralelo con un tamaño de grupo idéntico al número de GPU disponibles."parallel"
: usar un grupo paralelo local o remoto basado en su perfil de cluster predeterminado. Si no hay grupo paralelo actual, el software inicia uno mediante el perfil de cluster predeterminado. Si el grupo tiene acceso a varias GPU, solo workers con una GPU única realizan el cálculo. Si el grupo no tiene varias GPU, en su lugar el cálculo se realiza en todos los workers de las CPU disponibles.
Para obtener más información sobre cuándo utilizar los diferentes entornos de ejecución, consulte Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud.
Las opciones "gpu"
, "multi-gpu"
y "parallel"
requieren Parallel Computing Toolbox. Para utilizar una GPU para deep learning, debe también disponer de un dispositivo GPU compatible. Para obtener información sobre los dispositivos compatibles, consulte GPU Computing Requirements (Parallel Computing Toolbox). Si elige una de estas opciones y Parallel Computing Toolbox o una GPU adecuada no está disponible, el software devuelve un error.
Para hacer predicciones en paralelo con redes con capas recurrentes (estableciendo ExecutionEnvironment
en "multi-gpu"
o "parallel"
), la opción SequenceLength
debe ser "shortest"
o "longest"
.
Las redes con capas personalizadas que contienen parámetros State
no son compatibles con hacer predicciones en paralelo.
Argumentos de salida
act
— Activaciones desde la capa de red
Arreglo numérico | arreglo de celdas
Activaciones desde la capa de red, devueltas como un arreglo numérico o un arreglo de celdas de arreglos numéricos. El formato de act
depende del tipo de datos de entrada, del tipo de salida de la capa y de la opción OutputAs
especificada.
Salida secuencial plegada o de imágenes
Si la capa produce como salida datos secuenciales plegados o de imágenes, act
es un arreglo numérico.
OutputAs | act |
---|---|
"channels" | Para salida de imágenes 2D, Para salida de imágenes 3D, Para salida secuencial plegada de imágenes 2D, Para salida secuencial plegada de imágenes 3D, |
"rows" | Para salida de imágenes 2D y 3D, Para salida secuencial plegada de imágenes 2D y 3D, |
"columns" | Para salida de imágenes 2D y 3D, Para salida secuencial plegada de imágenes 2D y 3D, |
Salida secuencial
Si layer
tiene salida secuencial (por ejemplo, capas de LSTM con el modo de salida "sequence"
), act
es un arreglo de celdas. En este caso, la opción "OutputAs"
debe ser "channels"
.
OutputAs | act |
---|---|
"channels" | Para salida secuencial de vector, Para salida secuencial de imágenes 2D, Para salida secuencial de imágenes 3D, En estos casos, |
Salida de vector de características y unidad de tiempo única
Si layer
produce como salida un vector de características o una unidad de tiempo única de una secuencia (por ejemplo, una capa de LSTM con el modo de salida "last"
), act
es un arreglo numérico.
OutputAs | act |
---|---|
"channels" | Para un vector de características o una unidad de tiempo única que contiene datos de vector, Para una unidad de tiempo única que contiene datos de imágenes 2D, Para una unidad de tiempo única que contiene datos de imágenes 3D, |
"rows" | Matriz de n por m, donde n es el número de observaciones y m es el número de elementos de salida de la capa escogida. En este caso, act(i,:) contiene las activaciones para la i -ésima secuencia. |
"columns" | Matriz de m por n, donde m es el número de elementos de salida de la capa escogida y n es el número de observaciones. En este caso, act(:,i) contiene las activaciones para la i -ésima imagen. |
Algoritmos
Aritmética de punto flotante
Cuando entrena una red neuronal mediante la función trainNetwork
o cuando usa las funciones de predicción o validación con objetos DAGNetwork
y SeriesNetwork
, el software realiza estos cálculos utilizando aritmética de precisión simple y de punto flotante. Las funciones para entrenamiento, predicción y validación incluyen trainNetwork
, predict
, classify
y activations
. El software utiliza aritmética de precisión simple cuando entrena redes neuronales usando tanto CPU como GPU.
Reproducibilidad
Para proporcionar el mejor rendimiento, no se garantiza que deep learning utilizando una GPU en MATLAB sea determinista. Según la arquitectura de su red, con ciertas condiciones puede obtener resultados diferentes al usar una GPU para entrenar dos redes idénticas o hacer dos predicciones utilizando la misma red y los mismos datos.
Referencias
[1] Kudo, Mineichi, Jun Toyama, and Masaru Shimbo. “Multidimensional Curve Classification Using Passing-through Regions.” Pattern Recognition Letters 20, no. 11–13 (November 1999): 1103–11. https://doi.org/10.1016/S0167-8655(99)00077-X.
[2] UCI Machine Learning Repository: Japanese Vowels Dataset. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels.
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
La generación de código C++ es compatible con las siguientes sintaxis:
act = activations(net,images,layer)
, dondeimages
es un arreglo numéricoact = activations(net,sequences,layer)
, dondesequences
es un arreglo de celdasact = activations(net,features,layer)
, dondefeatures
es un arreglo numéricoact = activations(__,Name,Value)
utilizando cualquiera de las sintaxis anteriores
Para entradas numéricas, la entrada no debe tener tamaño variable. El tamaño de la entrada debe estar fijado en el momento de la generación de código.
Para entradas secuenciales de vector, el número de características debe ser una constante durante la generación de código. La longitud de la secuencia puede tener un tamaño variable.
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.
El argumento
layer
debe ser una constante durante la generación de código.Solo los argumentos de par nombre-valor
OutputAs
,MiniBatchSize
,SequenceLength
,SequencePaddingDirection
ySequencePaddingValue
son compatibles con la generación de código. Todos los pares nombre-valor deben ser constantes en tiempo de compilación.El formato de las activaciones de salida debe ser
"channels"
.Solo las opciones
"longest"
y"shortest"
del par nombre-valorSequenceLength
son compatibles con la generación de código.La generación de código para el objetivo de Intel® MKL-DNN no es compatible con la combinación de argumentos nombre-valor
SequenceLength="longest"
,SequencePaddingDirection="left"
ySequencePaddingValue=0
.
Para obtener información sobre generar código para redes neuronales de deep learning, consulte Workflow for Deep Learning Code Generation with MATLAB Coder (MATLAB Coder).
Generación de código de GPU
Genere código CUDA® para GPU NVIDIA® mediante GPU Coder™.
Notas y limitaciones de uso:
La generación de código GPU es compatible con las siguientes sintaxis:
act = activations(net,images,layer)
, dondeimages
es un arreglo numéricoact = activations(net,sequences,layer)
, dondesequences
es un arreglo de celdas o un arreglo numéricoact = activations(net,features,layer)
, dondefeatures
es un arreglo numéricoact = activations(__,Name,Value)
utilizando cualquiera de las sintaxis anteriores
Para entradas numéricas, la entrada no debe tener tamaño variable. El tamaño de la entrada debe estar fijado en el momento de la generación de código.
La generación de código GPU no es compatible con entradas
gpuArray
a la funciónactivations
.La biblioteca cuDNN es compatible con secuencias de vector y de imágenes 2D. La biblioteca TensorRT es solo compatible con secuencia de entrada de vector. La ARM®
Compute Library
para GPU no es compatible con redes recurrentes.Para entradas secuenciales de vector, el número de características debe ser una constante durante la generación de código. La longitud de la secuencia puede tener un tamaño variable.
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.
El argumento
layer
debe ser una constante durante la generación de código.Solo los argumentos de par nombre-valor
OutputAs
,MiniBatchSize
,SequenceLength
,SequencePaddingDirection
ySequencePaddingValue
son compatibles con la generación de código. Todos los pares nombre-valor deben ser constantes en tiempo de compilación.El formato de las activaciones de salida debe ser
"channels"
.Solo las opciones
"longest"
y"shortest"
del par nombre-valorSequenceLength
son compatibles con la generación de código.La generación de código GPU para la función
activations
es compatible con entradas definidas como tipo de datos de precisión media y como flotante. Para obtener más información, consultehalf
(GPU Coder).
Arreglos GPU
Acelere código mediante la ejecución en una unidad de procesamiento gráfico (GPU) mediante Parallel Computing Toolbox™.
La opción
ExecutionEnvironment
debe ser"auto"
o"gpu"
cuando los datos de entrada son:Un
gpuArray
Un arreglo de celdas que contiene objetos
gpuArray
Una tabla que contiene objetos
gpuArray
Un almacén de datos que produce como salida arreglos de celdas que contienen objetos
gpuArray
Un almacén de datos que produce como salida tablas que contienen objetos
gpuArray
Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Historial de versiones
Introducido en R2016aR2022b: Las funciones de predicción rellenan los minilotes hasta la longitud de la secuencia más larga antes de dividirla cuando se especifica la opción SequenceLength
como un número entero.
A partir de R2022b, cuando se hacen predicciones con datos secuenciales utilizando las funciones predict
, classify
, predictAndUpdateState
, classifyAndUpdateState
y activations
y la opción SequenceLength
es un número entero, el software rellena las secuencias hasta la longitud de la secuencia más larga en cada minilote y, luego, divide las secuencias en minilotes con la longitud de secuencia especificada. Si SequenceLength
no divide uniformemente la longitud de la secuencia del minilote, entonces el último minilote dividido tiene una longitud más corta que SequenceLength
. Este comportamiento evita que las unidades de tiempo que contienen solo valores de relleno influyan en las predicciones.
En versiones anteriores, el software rellena los minilotes de secuencias para que tengan una longitud que coincida con el múltiplo más cercano de SequenceLength
que sea mayor o igual a la longitud del minilote y, luego, divide los datos. Para reproducir este comportamiento, rellene de forma manual los datos de entrada de modo que los minilotes tengan una longitud múltiple de SequenceLength
apropiada. Para flujos de trabajo de secuencia a secuencia, es posible que también deba eliminar de forma manual unidades de tiempo de la salida que correspondan a valores de relleno.
Abrir ejemplo
Tiene una versión modificada de este ejemplo. ¿Desea abrir este ejemplo con sus modificaciones?
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)