predict
Calcular salidas de redes de deep learning para inferencias
Sintaxis
Descripción
Algunas capas de deep learning se comportan de forma diferente durante el entrenamiento y la inferencia (predicción). Por ejemplo, durante el entrenamiento, las capas de abandono establecen elementos en cero de forma aleatoria para ayudar a evitar el sobreajuste, pero, durante la inferencia, las capas de abandono no cambian la entrada.
[Y1,...,YN] = predict(___)
devuelve las N
salidas Y1
, …, YN
durante la inferencia para redes que tienen N
salidas que usan cualquiera de las sintaxis anteriores.
[Y1,...,YK] = predict(___,Outputs=
devuelve las salidas layerNames
)Y1
, …, YK
durante la inferencia para las capas especificadas que usan cualquiera de las sintaxis anteriores.
[___] = predict(___,
especifica opciones adicionales con uno o más argumentos nombre-valor.Name=Value
)
[___,
también devuelve el estado de red actualizado.state
] = predict(___)
Ejemplos
Cargue una red neuronal SqueezeNet preentrenada en el área de trabajo.
[net,classNames] = imagePretrainedNetwork;
Lea una imagen de un archivo PNG y clasifíquela. Para clasificar la imagen, primero conviértala al tipo de datos single
.
im = imread("peppers.png");
figure
imshow(im)
X = single(im); scores = predict(net,X); [label,score] = scores2label(scores,classNames);
Muestre la imagen con la etiqueta predicha y la puntuación correspondiente.
figure imshow(im) title(string(label) + " (Score: " + score + ")")
Argumentos de entrada
Este argumento puede representar cualquiera de estas opciones:
Red para bucles de entrenamiento personalizados, especificada como un objeto
dlnetwork
.Red para bucles de poda personalizados, especificada como un objeto
TaylorPrunableNetwork
.
Para podar una red neuronal profunda, se requiere el paquete de soporte Deep Learning Toolbox™ Model Quantization Library. Este paquete es un complemento gratuito que puede descargarse a través de Add-On Explorer. Como alternativa, consulte Deep Learning Toolbox Model Quantization Library.
Datos de entrada, especificados como uno de estos valores:
Arreglo numérico (desde R2023b)
objeto
dlarray
(desde R2023b)Objeto
dlarray
con formato
Sugerencia
Las redes neuronales esperan datos de entrada con una disposición específica. Por ejemplo, las redes de clasificación de secuencias de vectores suelen esperar que las representaciones de secuencias de vectores sean arreglos de t por c, donde t y c son el número de unidades de tiempo y los canales de las secuencias, respectivamente. Las redes neuronales suelen tener una capa de entrada que especifica la disposición esperada de los datos.
La mayoría de los almacenes de datos y funciones generan como salida datos con la disposición que espera la red. Si los datos tienen una disposición diferente de lo que espera la red, indique que los datos tienen una disposición diferente usando la opción InputDataFormats
o especificando los datos de entrada como un objeto dlarray
con formato. Normalmente es más sencillo ajustar la opción de entrenamiento InputDataFormats
que preprocesar los datos de entrada.
Para redes neuronales que no tengan capas de entrada, debe utilizar la opción InputDataFormats
o usar objetos dlarray
con formato.
Para obtener más información, consulte Deep Learning Data Formats.
Capas de las que extraer salidas, especificadas como un arreglo de cadenas o un arreglo de celdas de vectores de caracteres que contienen los nombres de las capas.
Si
layerNames(i)
corresponde a una capa con una única salida,layerNames(i)
es el nombre de la capa.Si
layerNames(i)
corresponde a una capa con varias salidas,layerNames(i)
es el nombre de la capa seguido por el carácter/
y el nombre de la salida de la capa:"layerName/outputName"
.
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, utilice comas para separar cada nombre y valor, y encierre Name
entre comillas.
Ejemplo: Y = predict(net,X,InputDataFormats="CBT")
hace predicciones con datos de secuencias que tienen el formato "CBT"
(canal, lote, tiempo).
Desde R2023b
Descripción de las dimensiones de los datos de entrada, especificada como un arreglo de cadenas, un vector de caracteres o un arreglo de celdas de vectores de caracteres.
Si InputDataFormats
es "auto"
, el software usa los formatos esperados por la entrada de red. De lo contrario, el software usa los formatos especificados para la entrada de red correspondiente.
Un formato de datos es una cadena de caracteres, en la que cada carácter describe el tipo de la dimensión de datos correspondiente.
Los caracteres son los siguientes:
"S"
: espacial"C"
: canal"B"
: lote"T"
: tiempo"U"
: sin especificar
Por ejemplo, considere un arreglo que contiene un lote de secuencias, donde la primera, la segunda y la tercera dimensión corresponden a canales, observaciones y unidades de tiempo, respectivamente. Puede especificar que este arreglo tenga el formato "CBT"
(canal, lote, tiempo).
Puede especificar varias dimensiones etiquetadas "S"
o "U"
. Puede utilizar las etiquetas "C"
, "B"
y "T"
como máximo una vez cada una. El software ignora las dimensiones únicas "U"
restantes tras la segunda dimensión.
Para redes neuronales con varias entradas net
, especifique un arreglo de formatos de datos de entrada, donde InputDataFormats(i)
corresponde a la entrada net.InputNames(i)
.
Para obtener más información, consulte Deep Learning Data Formats.
Tipos de datos: char
| string
| cell
Desde R2023b
Descripción de las dimensiones de los datos de salida, especificada como uno de estos valores:
"auto"
: si los datos de salida contienen el mismo número de dimensiones que los de entrada, la funciónpredict
usa el formato especificado porInputDataFormats
. Si los datos de salida contienen un número de dimensiones distinto que los de entrada, la funciónpredict
permuta automáticamente las dimensiones de los datos de salida para que sean coherentes con las capas de entrada de la red, la opciónInputDataFormats
o los objetivos esperados por la funcióntrainnet
.Formatos de los datos, especificados como un arreglo de cadenas, un vector de caracteres o un arreglo de celdas de vectores de caracteres: la función
predict
usa los formatos de datos especificados.
Un formato de datos es una cadena de caracteres, en la que cada carácter describe el tipo de la dimensión de datos correspondiente.
Los caracteres son los siguientes:
"S"
: espacial"C"
: canal"B"
: lote"T"
: tiempo"U"
: sin especificar
Por ejemplo, considere un arreglo que contiene un lote de secuencias, donde la primera, la segunda y la tercera dimensión corresponden a canales, observaciones y unidades de tiempo, respectivamente. Puede especificar que este arreglo tenga el formato "CBT"
(canal, lote, tiempo).
Puede especificar varias dimensiones etiquetadas "S"
o "U"
. Puede utilizar las etiquetas "C"
, "B"
y "T"
como máximo una vez cada una. El software ignora las dimensiones únicas "U"
restantes tras la segunda dimensión.
Para obtener más información, consulte Deep Learning Data Formats.
Tipos de datos: char
| string
| cell
Optimización del rendimiento, especificada como uno de estos valores:
"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 se usa una GPU. Debe almacenar los datos de entrada o los parámetros que se pueden aprender de la red como objetosgpuArray
. 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). Si no está disponible Parallel Computing Toolbox o una GPU adecuada, el software devuelve un error."none"
: deshabilitar toda la aceleración.
Cuando usa la opción "auto"
o "mex"
, el software puede ofrecer beneficios de rendimiento a costa de un mayor tiempo de ejecución inicial. Las siguientes llamadas a la función suelen ser más rápidas. Utilice la optimización de rendimiento cuando llame a la función varias veces con distintos datos de entrada.
Cuando Acceleration
es "mex"
, el software genera y ejecuta una función MEX basada en el modelo y en los parámetros que especifica en la llamada a la función. Un único modelo puede tener varias funciones MEX asociadas al mismo tiempo. Borrar la variable de modelo también borra cualquier función MEX asociada a ese modelo.
Cuando Acceleration
es "auto"
, el software no genera una función MEX.
La opción "mex"
solo está disponible cuando usa una GPU. 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 Set Up Compiler (GPU Coder). No se requiere GPU Coder.
La opción "mex"
tiene estas limitaciones:
El argumento de salida
state
no es compatible.Solo es compatible la precisión
single
. Los datos de entrada o los parámetros que se pueden aprender deben tener el tipo subyacentesingle
.Las redes con entradas que no están conectadas a una capa de entrada no son compatibles.
Los objetos
dlarray
rastreados no son compatibles. Esto significa que la opción"mex"
no es compatible dentro de una llamada adlfeval
.No todas las capas son compatibles. Para obtener una lista de capas compatibles, consulte Supported Layers (GPU Coder).
MATLAB Compiler™ no admite el despliegue de la red cuando se utiliza la opción
"mex"
.
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.
Argumentos de salida
Datos de salida, devueltos como uno de estos valores:
Arreglo numérico (desde R2023b)
Objeto
dlarray
sin formato (desde R2023b)Objeto
dlarray
con formato
El tipo de datos coincide con el tipo de datos de los datos de entrada.
Estado de la red actualizado, devuelto como tabla.
El estado de la red es una tabla con tres columnas:
Layer
: nombre de la capa, especificado como un escalar de cadena.Parameter
: nombre del parámetro de estado, especificado como un escalar de cadena.Value
: valor del parámetro de estado, especificado como un objetodlarray
.
Los estados de capa contienen información calculada durante la operación de capa que se conservará para su uso en posteriores pases hacia delante de la capa. Un ejemplo sería el estado de las celdas y el estado oculto de las capas LSTM, o las estadísticas de ejecución en las capas de normalización de lotes.
Para capas recurrentes, como las capas LSTM, con la propiedad HasStateInputs
establecida en 1
(true
), la tabla de estados no contiene entradas para los estados de esa capa.
Actualice el estado de un objeto dlnetwork
usando la propiedad State
.
Algoritmos
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. Si requiere determinismo cuando realiza operaciones de deep learning con una GPU, use la función deep.gpu.deterministicAlgorithms
(desde R2024b).
Si usa la función rng
para establecer el mismo generador de números aleatorios y semilla, las predicciones hechas con la CPU son reproducibles.
Capacidades ampliadas
Notas y limitaciones de uso:
La generación de código C++ es compatible con las siguientes sintaxis:
Y = predict(net,X)
Y = predict(net,X1,...,XM)
[Y1,...,YN] = predict(__)
[Y1,...,YK] = predict(__,'Outputs',layerNames)
Puede generar código C/C++ genérico que no dependa de bibliotecas de terceros para la sintaxis
[__,state] = predict(__)
.La generación de código permite ajustar la variable
Value
de la propiedadState
. La generación de código no permite modificar las variablesLayer
yParameter
de la propiedadState
.La generación de código admite estas funciones para la propiedad
State
:Para la simulación en Simulink, la generación de código no admite la extracción y actualización del
State
de un objetodlnetwork
en un bloque MATLAB Function. En su lugar, use un bloqueStateful Predict
o un bloqueStateful Classify
.Los datos de entrada
X
solo pueden tener un tamaño variable en la dimensión tiempo ("T"). Otras dimensiones de datos para los datos de entradaX
no deben tener tamaño variable. El tamaño debe estar fijado en el momento de la generación de código.La generación de código no es compatible con pasar entradas de valores complejos al método
predict
del objetodlnetwork
.La entrada
dlarray
del métodopredict
debe ser un tipo de datossingle
.
Notas y limitaciones de uso:
La generación de código GPU es compatible con las siguientes sintaxis:
Y = predict(net,X)
Y = predict(net,X1,...,XM)
[Y1,...,YN] = predict(__)
[Y1,...,YK] = predict(__,'Outputs',layerNames)
Puede generar código CUDA estándar que sea independiente de bibliotecas de deep learning para la sintaxis
[__,state] = predict(__)
.La generación de código permite ajustar la variable
Value
de la propiedadState
. La generación de código no permite modificar las variablesLayer
yParameter
de la propiedadState
.La generación de código admite estas funciones para la propiedad
State
:Para la simulación en Simulink, la generación de código no admite la extracción y actualización del
State
de un objetodlnetwork
en un bloque MATLAB Function. En su lugar, use un bloqueStateful Predict
o un bloqueStateful Classify
.Los datos de entrada
X
solo pueden tener un tamaño variable en la dimensión tiempo ("T"). Otras dimensiones de datos para los datos de entradaX
no deben tener tamaño variable. El tamaño debe estar fijado en el momento de la generación de código.La generación de código para la biblioteca TensorRT no admite marcar una capa de entrada como salida usando la sintaxis
[Y1,...,YK] = predict(__,'Outputs',layerNames)
.La generación de código no admite pasar entradas de valores complejos al método
predict
del objetodlnetwork
.La entrada
dlarray
del métodopredict
debe ser un tipo de datossingle
.
La función predict
es compatible con entradas de arreglos de GPU con estas notas y limitaciones de uso:
Esta función se ejecuta en la GPU si alguna de las siguientes condiciones o ambas se cumplen:
Cualquiera de los valores de los parámetros que se pueden aprender de la red dentro de
net.Learnables.Value
son objetosdlarray
con datos subyacentes de tipogpuArray
.Cuando el argumento de entrada
X
es un arreglodlarray
con datos subyacentes de tipogpuArray
.
Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Historial de versiones
Introducido en R2019bHaga predicciones usando arreglos numéricos y objetos dlarray
sin formato.
Especifique los formatos de los datos de entrada y salida usando las opciones InputDataFormats
y OutputDataFormats
, respectivamente.
Para objetos dlnetwork
, el argumento de salida state
devuelto por la función predict
es una tabla que contiene los nombres y valores de los parámetros de estado de cada capa de la red.
A partir de la versión R2021a, los valores de estado son objetos dlarray
. Este cambio permite mejorar la asistencia cuando se usan objetos AcceleratedFunction
. Para acelerar las funciones de deep learning que tienen valores de entrada que cambian con frecuencia, por ejemplo, una entrada que contiene el estado de la red, los valores que cambian con frecuencia deben especificarse como objetos dlarray
.
En versiones anteriores, los valores de estado son arreglos numéricos.
En la mayoría de los casos, no necesitará actualizar su código. Si tiene código que requiere que los valores de estado sean arreglos numéricos, para reproducir el comportamiento anterior, extraiga manualmente los datos de los valores de estado mediante la función extractdata
con la función dlupdate
.
state = dlupdate(@extractdata,net.State);
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- 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)