trainingOptions
Opciones para entrenar una red neuronal de deep learning
Descripción
devuelve opciones de entrenamiento para el optimizador especificado por options
= trainingOptions(solverName
)solverName
. Para entrenar una red neuronal, use las opciones de entrenamiento como un argumento de entrada para la función trainNetwork
.
devuelve opciones de entrada con opciones adicionales especificadas por uno o más argumentos nombre-valor.options
= trainingOptions(solverName
,Name=Value
)
Ejemplos
Especificar las opciones de entrenamiento
Cree un conjunto de opciones para entrenar una red mediante gradiente descendente estocástico con momento. Reduzca la tasa de aprendizaje por un factor de 0.2 cada 5 épocas. Establezca el número máximo de épocas para entrenamiento en 20 y use un minilote con 64 observaciones en cada iteración. Active la gráfica de progreso del entrenamiento.
options = trainingOptions("sgdm", ... LearnRateSchedule="piecewise", ... LearnRateDropFactor=0.2, ... LearnRateDropPeriod=5, ... MaxEpochs=20, ... MiniBatchSize=64, ... Plots="training-progress")
options = TrainingOptionsSGDM with properties: Momentum: 0.9000 InitialLearnRate: 0.0100 LearnRateSchedule: 'piecewise' LearnRateDropFactor: 0.2000 LearnRateDropPeriod: 5 L2Regularization: 1.0000e-04 GradientThresholdMethod: 'l2norm' GradientThreshold: Inf MaxEpochs: 20 MiniBatchSize: 64 Verbose: 1 VerboseFrequency: 50 ValidationData: [] ValidationFrequency: 50 ValidationPatience: Inf Shuffle: 'once' CheckpointPath: '' CheckpointFrequency: 1 CheckpointFrequencyUnit: 'epoch' ExecutionEnvironment: 'auto' WorkerLoad: [] OutputFcn: [] Plots: 'training-progress' SequenceLength: 'longest' SequencePaddingValue: 0 SequencePaddingDirection: 'right' DispatchInBackground: 0 ResetInputNormalization: 1 BatchNormalizationStatistics: 'population' OutputNetwork: 'last-iteration'
Monitorizar el progreso del entrenamiento de deep learning
Este ejemplo muestra cómo monitorizar el proceso de entrenamiento en redes de deep learning.
Cuando entrena redes para deep learning, suele ser útil monitorizar el progreso de dicho entrenamiento. Representando varias métricas durante el proceso, puede comprobar cómo este progresa. Por ejemplo, puede determinar si la precisión de la red está mejorando y con qué rapidez, y si la red está empezando a sobreajustar los datos de entrenamiento.
En este ejemplo se muestra cómo monitorizar el progreso de entrenamiento para redes entrenadas usando la función trainNetwork
. Para redes entrenadas con un bucle de entrenamiento personalizado, utilice un objeto trainingProgressMonitor
para representar métricas durante el entrenamiento. Para obtener más información, consulte Monitor Custom Training Loop Progress.
Cuando establece la opción de entrenamiento Plots
en "training-progress"
para trainingOptions
y comienza el entrenamiento de la red, trainNetwork
crea una figura y muestra las métricas de entrenamiento en cada iteración. Cada iteración es una estimación del gradiente y una actualización de los parámetros de la red. Si se especifican los datos de validación en trainingOptions
, la figura muestra las métricas de validación cada vez que trainNetwork
valida la red. La figura representa lo siguiente:
Precisión del entrenamiento: precisión de la clasificación en cada minilote individual.
Precisión de entrenamiento suavizada: precisión de entrenamiento suavizada, que se obtiene aplicando un algoritmo de suavizado a la precisión del entrenamiento. Hay menos ruido que en la precisión sin suavizar, lo que facilita la detección de tendencias.
Precisión de validación: precisión de la clasificación en todo el conjunto de validación (se especifica mediante
trainingOptions
).Pérdida de entrenamiento, pérdida de entrenamiento suavizada y pérdida de validación: la pérdida en cada minilote, su versión suavizada y la pérdida en el conjunto de validación, respectivamente. La capa final de la red es una
classificationLayer
, por lo que la función de pérdida es la pérdida de entropía cruzada. Para obtener más información sobre las funciones de pérdida para los problemas de regresión y clasificación, consulte Output Layers.
En el caso de las redes de regresión, la figura representa el error cuadrático medio raíz (RMSE) en lugar de la precisión.
La figura marca cada Época de entrenamiento con un fondo sombreado. Una época es una pasada completa por el conjunto de datos.
Durante el entrenamiento, puede detenerlo y devolver el estado actual de la red haciendo clic en el botón de stop de la esquina superior derecha. Por ejemplo, es posible que quiera dejar de entrenar cuando la precisión se estabilice y quede claro que no mejorará más. Una vez que haya hecho clic en el botón de stop, el entrenamiento podría tardar un poco antes de completarse. Una vez completado, trainNetwork
devuelve la red entrenada.
Cuando finalice el entrenamiento, vea los Resultados que indican la precisión de validación finalizada y la razón por la que se ha finalizado el entrenamiento. Si la opción de entrenamiento OutputNetwork
está en "last-iteration"
(valor predeterminado), las métricas finalizadas corresponden a la última iteración de entrenamiento. Si la opción de entrenamiento OutputNetwork
está en "best-validation-loss"
, las métricas finalizadas corresponden a la iteración con la pérdida de validación más baja. La iteración a partir de la cual se calculan las métricas de validación finales se etiqueta como Final en las gráficas.
Si la red contiene capas de normalización de lotes, la métrica de validación final puede ser diferente a la métrica de validación evaluada durante el entrenamiento. Esto se debe a que las estadísticas de la media y la varianza utilizadas para la normalización de lotes pueden diferir después de completar el entrenamiento. Por ejemplo, si la opción de entrenamiento BatchNormalizationStatisics
está en "population"
, después del proceso, el software finaliza las estadísticas de normalización de lotes pasando por los datos de entrenamiento una vez más y utiliza la media y la varianza resultantes. Si la opción de entrenamiento BatchNormalizationStatisics
está en "moving"
, el software aproxima las estadísticas durante el entrenamiento utilizando una estimación continua y utiliza los últimos valores de las estadísticas.
A la derecha, vea la información sobre el tiempo de entrenamiento y los ajustes. Para obtener más información sobre las opciones de entrenamiento, consulte Set Up Parameters and Train Convolutional Neural Network.
Para guardar la gráfica del progreso de entrenamiento, haga clic en Export Training Plot en la ventana del entrenamiento. Puede guardar la gráfica como archivo PNG, JEPG, TIFF o PDF. También puede guardar de forma individual las gráficas de pérdida, precisión y error cuadrático medio raíz con la barra de herramientas de los ejes.
Representar el progreso del entrenamiento durante el mismo
Entrene una red y represente el progreso de entrenamiento durante el mismo.
Cargue los datos de entrenamiento, que contienen 5000 imágenes de dígitos. Reserve 1000 de las imágenes para la validación de la red.
[XTrain,YTrain] = digitTrain4DArrayData; idx = randperm(size(XTrain,4),1000); XValidation = XTrain(:,:,:,idx); XTrain(:,:,:,idx) = []; YValidation = YTrain(idx); YTrain(idx) = [];
Construya una red para clasificar los datos de las imágenes de los dígitos.
layers = [ imageInputLayer([28 28 1]) convolution2dLayer(3,8,Padding="same") batchNormalizationLayer reluLayer maxPooling2dLayer(2,Stride=2) convolution2dLayer(3,16,Padding="same") batchNormalizationLayer reluLayer maxPooling2dLayer(2,Stride=2) convolution2dLayer(3,32,Padding="same") batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer];
Especifique opciones para el entrenamiento de la red. Para validar la red a intervalos regulares durante el entrenamiento, especifique los datos de validación. Elija el valor ValidationFrequency
para que la red se valide alrededor de una vez por época. Para representar el progreso del entrenamiento durante el mismo, establezca la opción de entrenamiento Plots
en "training-progress"
.
options = trainingOptions("sgdm", ... MaxEpochs=8, ... ValidationData={XValidation,YValidation}, ... ValidationFrequency=30, ... Verbose=false, ... Plots="training-progress");
Entrene la red.
net = trainNetwork(XTrain,YTrain,layers,options);
Argumentos de entrada
solverName
— Solver para entrenar la red neuronal
'sgdm'
| 'rmsprop'
| 'adam'
Solver para entrenar la red neuronal, especificado como una de las opciones siguientes:
'sgdm'
: usar el optimizador de gradiente descendente estocástico con momento (SGDM). Puede especificar el valor de momento mediante la opción de entrenamientoMomentum
.'rmsprop'
: usar el optimizador RMSProp. Puede especificar la tasa de decaimiento de la media móvil de gradiente cuadrado mediante la opción de entrenamientoSquaredGradientDecayFactor
.'adam'
: usar el optimizador Adam. Puede especificar las tasas de decaimiento de la media móvil de gradiente y de gradiente cuadrado mediante las opciones de entrenamientoGradientDecayFactor
ySquaredGradientDecayFactor
, respectivamente.
Para obtener más información sobre los diferentes solvers, consulte Gradiente descendente estocástico.
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: InitialLearnRate=0.03,L2Regularization=0.0005,LearnRateSchedule="piecewise"
especifica la tasa de aprendizaje principal como 0.03 y el factor de regularización L2
como 0.0005 y dirige instrucciones al software para que reduzca la tasa de aprendizaje cada cierto número de épocas multiplicándola por un determinado factor.
Plots
— Gráficas que se desea visualizar durante el entrenamiento de red neuronal
'none'
(predeterminado) | 'training-progress'
Gráficas que se desea visualizar durante el entrenamiento de red neuronal, especificadas como una de las opciones siguientes:
'none'
: no visualizar gráficas durante el entrenamiento.'training-progress'
: representar el progreso del entrenamiento. La gráfica muestra información sobre la pérdida y la precisión de minilotes y la pérdida y la precisión de validación, así como información adicional sobre el progreso del entrenamiento. La gráfica incluye el botón de detenciónen la esquina superior derecha. Haga clic en el botón para detener el entrenamiento y devolver el estado actual de la red neuronal. Puede guardar la gráfica de entrenamiento como una imagen o PDF haciendo clic en Export Training Plot. Para obtener más información sobre la gráfica de progreso del entrenamiento, consulte Monitorizar el progreso del entrenamiento de deep learning.
Verbose
— Indicador para mostrar información sobre el progreso del entrenamiento
1
(verdadero) (predeterminado) | 0
(falso)
Indicador para mostrar información sobre el progreso del entrenamiento en la ventana de comandos, especificado como 1
(verdadero) o 0
(falso).
La salida detallada muestra la siguiente información:
Redes neuronales de clasificación
Campo | Descripción |
---|---|
Epoch | Número de épocas. Una época corresponde a una pasada completa de los datos. |
Iteration | Número de iteraciones. Una iteración corresponde a un minilote. |
Time Elapsed | Tiempo transcurrido en horas, minutos y segundos. |
Mini-batch Accuracy | Precisión de clasificación en el minilote. |
Validation Accuracy | Precisión de clasificación en los datos de validación. Si no especifica datos de validación, la función no muestra este campo. |
Mini-batch Loss | Pérdida en el minilote. Si la capa de salida es un objeto ClassificationOutputLayer , la pérdida es la pérdida de entropía cruzada para problemas de clasificación de varias clases con clases mutuamente excluyentes. |
Validation Loss | Pérdida en los datos de validación. Si la capa de salida es un objeto ClassificationOutputLayer , la pérdida es la pérdida de entropía cruzada para problemas de clasificación de varias clases con clases mutuamente excluyentes. Si no especifica datos de validación, la función no muestra este campo. |
Base Learning Rate | Tasa de aprendizaje base. El software multiplica los factores de tasa de aprendizaje de las capas por este valor. |
Redes neuronales de regresión
Campo | Descripción |
---|---|
Epoch | Número de épocas. Una época corresponde a una pasada completa de los datos. |
Iteration | Número de iteraciones. Una iteración corresponde a un minilote. |
Time Elapsed | Tiempo transcurrido en horas, minutos y segundos. |
Mini-batch RMSE | Error cuadrático medio raíz (RMSE) en el minilote. |
Validation RMSE | RMSE en los datos de validación. Si no especifica datos de validación, el software no muestra este campo. |
Mini-batch Loss | Pérdida en el minilote. Si la capa de salida es un objeto RegressionOutputLayer , la pérdida es el error cuadrático medio dividido. |
Validation Loss | Pérdida en los datos de validación. Si la capa de salida es un objeto RegressionOutputLayer , la pérdida es el error cuadrático medio dividido. Si no especifica datos de validación, el software no muestra este campo. |
Base Learning Rate | Tasa de aprendizaje base. El software multiplica los factores de tasa de aprendizaje de las capas por este valor. |
Cuando el aprendizaje se detiene, la salida detallada muestra la razón de la detención.
Para especificar datos de validación, use la opción de entrenamiento ValidationData
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
VerboseFrequency
— Frecuencia de impresión detallada
50
(predeterminado) | entero positivo
Frecuencia de la impresión detallada, que es el número de iteraciones entre cada impresión en la ventana de comandos, especificada como un entero positivo. Esta opción tiene efecto cuando la opción de entrenamiento Verbose
es 1
(verdadero).
Si valida la red neuronal durante el entrenamiento, trainNetwork
también imprime en la ventana de comandos cada vez que tiene lugar la validación.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
MaxEpochs
— Número máximo de épocas
30
(predeterminado) | entero positivo
Número máximo de épocas que desea usar para el entrenamiento, especificado como un entero positivo.
Una iteración es un paso dado en el algoritmo de gradiente descendente para minimizar la función de pérdida mediante un minilote. Una época es una pasada completa del algoritmo de entrenamiento a lo largo de todo el conjunto de entrenamiento.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
MiniBatchSize
— Tamaño de minilote de
128
(predeterminado) | entero positivo
Tamaño de minilote que desea usar para cada iteración de entrenamiento, especificado como un entero positivo. Un minilote es un subconjunto del conjunto de entrenamiento que se usa para evaluar el gradiente de la función de pérdida y actualizar los pesos.
Si el tamaño de minilote no divide el número de muestras de entrenamiento de manera uniforme, trainNetwork
descarta los datos de entrenamiento que no caben en el minilote final completo de cada época.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Shuffle
— Opción para cambiar el orden de los datos
'once'
(predeterminado) | 'never'
| 'every-epoch'
Opción para cambiar el orden de los datos, especificada como una de las siguientes opciones:
'once'
: cambiar el orden de los datos de entrenamiento y validación una vez antes del entrenamiento.'never'
: no cambiar el orden de los datos.'every-epoch'
: cambiar el orden de los datos de entrenamiento antes de cada época de entrenamiento y cambiar el orden de los datos de validación antes de cada validación de la red neuronal. Si el tamaño de minilote no divide el número de muestras de entrenamiento de manera uniforme,trainNetwork
descarta los datos de entrenamiento que no caben en el minilote final completo de cada época. Para evitar descartar los mismos datos cada época, establezca la opción de entrenamientoShuffle
en'every-epoch'
.
ValidationData
— Datos que desea usar para la validación durante el entrenamiento
[]
(predeterminado) | almacén de datos | tabla | arreglo de celdas
Datos que desea usar para la validación durante el entrenamiento, especificados como []
, un almacén de datos, una tabla o un arreglo de celdas que contiene los predictores y respuestas de validación.
Puede especificar predictores y respuestas de validación mediante los mismos formatos compatibles con la función trainNetwork
. Puede especificar los datos de validación como un almacén de datos, una tabla o el arreglo de celdas {predictors,responses}
, donde predictors
contiene los predictores de validación y responses
contiene las respuestas de validación.
Para obtener más información, consulte los argumentos de entrada images
, sequences
y features
de la función trainNetwork
.
Durante el entrenamiento, trainNetwork
calcula la precisión de validación y la pérdida de validación en los datos de validación. Para especificar la frecuencia de validación, use la opción de entrenamiento ValidationFrequency
. También puede utilizar los datos de validación para detener el entrenamiento automáticamente cuando la pérdida de validación deje de disminuir. Para activar la detención automática de la validación, use la opción de entrenamiento ValidationPatience
.
Si su red neuronal tiene capas que se comportan de forma diferente durante la predicción y durante el entrenamiento (por ejemplo, capas de abandono), la precisión de validación puede ser mayor que la precisión de entrenamiento (minilote).
Los datos de validación se cambian de orden de acuerdo con la opción de entrenamiento Shuffle
. Si Shuffle
es 'every-epoch'
, los datos de validación se cambian de orden antes de cada validación de la red neuronal.
Si ValidationData
es []
, el software no valida la red neuronal durante el entrenamiento.
ValidationFrequency
— Frecuencia de la validación de la red neuronal
50
(predeterminado) | entero positivo
Frecuencia de la validación de la red neuronal en número de iteraciones, especificada como un entero positivo.
El valor ValidationFrequency
es el número de iteraciones entre evaluaciones de métricas de validación. Para especificar datos de validación, use la opción de entrenamiento ValidationData
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ValidationPatience
— Paciencia de la detención de la validación
Inf
(predeterminado) | entero positivo
Paciencia de la detención de la validación del entrenamiento de red neuronal, especificada como un entero positivo o Inf
.
ValidationPatience
especifica el número de veces que la pérdida en el conjunto de validación puede ser mayor que o igual a la menor pérdida previa antes de que el entrenamiento de la red neuronal se detenga. Si ValidationPatience
es Inf
, los valores de la pérdida de validación no provocan que el entrenamiento se detenga antes de tiempo.
La red neuronal devuelta depende de la opción de entrenamiento OutputNetwork
. Para devolver la red neuronal con la menor pérdida de validación, establezca la opción de entrenamiento OutputNetwork
en "best-validation-loss"
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OutputNetwork
— Red neuronal que se desea devolver cuando se completa el entrenamiento
'last-iteration'
(predeterminado) | 'best-validation-loss'
Red neuronal que se desea devolver cuando se completa el entrenamiento, especificada como una de las siguientes opciones:
'last-iteration'
: devuelve la red neuronal correspondiente a la última iteración de entrenamiento.'best-validation-loss'
: devuelve la red neuronal correspondiente a la iteración de entrenamiento con la menor pérdida de validación. Para usar esta opción debe especificar la opción de entrenamientoValidationData
.
InitialLearnRate
— Tasa de aprendizaje inicial
escalar positivo
Tasa de aprendizaje inicial usada para el entrenamiento, especificada como un escalar positivo.
El valor predeterminado es 0.01
para el solver 'sgdm'
y 0.001
para los solvers 'rmsprop'
y 'adam'
.
Si la tasa de aprendizaje es demasiado baja, el entrenamiento puede tardar mucho tiempo. Si la tasa de aprendizaje es demasiado alta, el entrenamiento podría lograr un resultado subóptimo o divergir.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
LearnRateSchedule
— Opción para reducir la tasa de aprendizaje durante el entrenamiento
'none'
(predeterminado) | 'piecewise'
Opción para reducir la tasa de aprendizaje durante el entrenamiento, especificada como una de las siguientes opciones:
'none'
: la tasa de aprendizaje se mantiene constante durante el entrenamiento.'piecewise'
: el software actualiza la tasa de aprendizaje cada cierto número de épocas multiplicándola por un determinado factor. Use la opción de entrenamientoLearnRateDropFactor
para especificar el valor de este factor. Use la opción de entrenamientoLearnRateDropPeriod
para especificar el número de épocas entre multiplicaciones.
LearnRateDropPeriod
— Número de épocas para reducir la tasa de aprendizaje
10
(predeterminado) | entero positivo
Número de épocas para reducir la tasa de aprendizaje, especificado como un entero positivo. Esta opción es válida solo cuando la opción de entrenamiento LearnRateSchedule
es 'piecewise'
.
El software multiplica la tasa de aprendizaje global por el factor de reducción cada vez que pasa el número de épocas especificado. Especifique el factor de reducción mediante la opción de entrenamiento LearnRateDropFactor
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
LearnRateDropFactor
— Factor para reducir la tasa de aprendizaje
0.1
(predeterminado) | escalar de 0
a 1
Factor para reducir la tasa de aprendizaje, especificado como un escalar de 0
a 1
. Esta opción es válida solo cuando la opción de entrenamiento LearnRateSchedule
es 'piecewise'
.
LearnRateDropFactor
es un factor multiplicativo para aplicar a la tasa de aprendizaje cada vez que pasa un determinado número de épocas. Especifique el número de épocas mediante la opción de entrenamiento LearnRateDropPeriod
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
L2Regularization
— Factor para regularización L2
0.0001
(predeterminado) | Escalar no negativo
Factor para regularización L2 (decaimiento de peso), especificado como un escalar no negativo. Para obtener más información, consulte Regularización L2.
Puede especificar un multiplicador para la regularización L2 para capas de red neuronal con parámetros que se pueden aprender. Para obtener más información, consulte Set Up Parameters in Convolutional and Fully Connected Layers.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Momentum
— Contribución del paso previo
0.9
(predeterminado) | escalar de 0
a 1
Contribución del paso de actualización de parámetros de la iteración previa a la iteración actual del gradiente descendente estocástico con momento, especificada como un escalar de 0
a 1
.
Un valor de 0
indica que no hay contribución desde el paso previo, mientras que un valor de 1
indica una contribución máxima desde el paso previo. El valor predeterminado funciona bien para la mayoría de tareas.
Para especificar la opción de entrenamiento Momentum
, solverName
debe ser 'sgdm'
.
Para obtener más información, consulte Gradiente descendente estocástico con momento.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
GradientDecayFactor
— Tasa de decaimiento de la media móvil de gradiente
0.9
(predeterminado) | escalar no negativo menor que 1
Tasa de decaimiento de la media móvil de gradiente para el solver Adam, especificada como un escalar no negativo menor que 1
. La tasa de decaimiento del gradiente está denotada por β1
en la sección Adam.
Para especificar la opción de entrenamiento GradientDecayFactor
, solverName
debe ser 'adam'
.
El valor predeterminado funciona bien para la mayoría de tareas.
Para obtener más información, consulte Adam.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
SquaredGradientDecayFactor
— Tasa de decaimiento de la media móvil de gradiente cuadrado
escalar no negativo menor que 1
Tasa de decaimiento de la media móvil de gradiente cuadrado para los solvers Adam y RMSProp, especificada como un escalar no negativo menor que 1
. La tasa de decaimiento del gradiente cuadrado está denotada por β2
en [4].
Para especificar la opción de entrenamiento SquaredGradientDecayFactor
, solverName
debe ser 'adam'
o 'rmsprop'
.
Valores típicos de la tasa de decaimiento son 0.9
, 0.99
y 0.999
, que corresponden a longitudes medias de 10
, 100
y 1000
actualizaciones de parámetros, respectivamente.
El valor predeterminado es 0.999
para el solver Adam. El valor predeterminado es 0.9
para el solver RMSProp.
Para obtener más información, consulte Adam y RMSProp.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Epsilon
— Desplazamiento del denominador
1e-8
(predeterminado) | escalar positivo
Desplazamiento del denominador para los solvers Adam y RMSProp, especificada como un escalar positivo.
El solver añade el desplazamiento al denominador en las actualizaciones de parámetros de la red neuronal para evitar una división por cero. El valor predeterminado funciona bien para la mayoría de tareas.
Para especificar la opción de entrenamiento Epsilon
, solverName
debe ser 'adam'
o 'rmsprop'
.
Para obtener más información, consulte Adam y RMSProp.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ResetInputNormalization
— Opción para restablecer la normalización de la capa de entrada
1
(verdadero) (predeterminado) | 0
(falso)
Opción para restablecer la normalización de la capa de entrada, especificada como una de las siguientes opciones:
1
(verdadero): restablecer las estadísticas de normalización de la capa de entrada y recalcularlas en el momento del entrenamiento.0
(falso): calcular las estadísticas de normalización en el momento del entrenamiento cuando están vacías.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
BatchNormalizationStatistics
— Modo para evaluar estadísticas en capas de normalización de lotes
'population'
(predeterminado) | 'moving'
Modo para evaluar estadísticas en capas de normalización de lotes, especificado como una de las siguientes opciones:
'population'
: usar las estadísticas de población. Después del entrenamiento, el software finaliza las estadísticas pasando por los datos de entrenamiento una vez más y utiliza la media y la varianza resultantes.'moving'
: aproximar las estadísticas durante el entrenamiento utilizando una estimación continua dada por pasos de actualizacióndonde y denotan la media y la varianza actualizadas, respectivamente, y denotan los valores de decaimiento de la media y la varianza, respectivamente, y denotan la media y la varianza de la entrada de la capa, respectivamente, y y denotan los valores más recientes de los valores de media y varianza móviles, respectivamente. Después del entrenamiento, el software usa el valor más reciente de las estadísticas de media y varianza móviles. Esta opción solo es compatible con CPU y GPU única.
GradientThreshold
— Umbral de gradiente
Inf
(predeterminado) | escalar positivo
Umbral de gradiente, especificado como Inf
o un escalar positivo. Si el gradiente supera el valor de GradientThreshold
, este se recorta de acuerdo con la opción de entrenamiento GradientThresholdMethod
.
Para obtener más información, consulte Recorte de gradiente.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
GradientThresholdMethod
— Método de umbral de gradiente
'l2norm'
(predeterminado) | 'global-l2norm'
| 'absolute-value'
Método de umbral de gradiente utilizado para recortar los valores de gradiente que superan el umbral de gradiente, especificado como una de las siguientes opciones:
'l2norm'
: si la norma L2 del gradiente de un parámetro que se puede aprender es mayor queGradientThreshold
, escalar el gradiente para que la norma L2 sea igual aGradientThreshold
.'global-l2norm'
: si la norma L2 global, L, es mayor queGradientThreshold
, escalar todos los gradientes por un factor deGradientThreshold/
L. La norma L2 global considera todos los parámetros que se pueden aprender.'absolute-value'
: si el valor absoluto de una derivada parcial individual en el gradiente de un parámetro que se puede aprender es mayor queGradientThreshold
, escala la derivada parcial para tener una magnitud igual aGradientThreshold
y mantenga el signo de la derivada parcial.
Para obtener más información, consulte Recorte de gradiente.
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
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.
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
ExecutionEnvironment
— Recurso de hardware para entrenar red neuronal
'auto'
(predeterminado) | 'cpu'
| 'gpu'
| 'multi-gpu'
| 'parallel'
Recurso de hardware para entrenar red neuronal, especificado como una de las siguientes opciones:
'auto'
: usar una GPU si hay alguna disponible. Si no, usar la CPU.'cpu'
: usar la CPU.'gpu'
: usar la GPU.'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 de entrenamiento. Si el grupo no tiene varias GPU, en su lugar el entrenamiento 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 ver una mejora en el rendimiento durante el entrenamiento en paralelo, intente escalar las opciones de entrenamiento MiniBatchSize
e InitialLearnRate
en función del número de las GPU.
Las opciones 'multi-gpu'
y 'parallel'
no son compatibles con redes neuronales que contienen capas personalizadas con parámetros de estado o capas integradas que tienen estado en el momento del entrenamiento. Por ejemplo:
Capas recurrentes como objetos
LSTMLayer
,BiLSTMLayer
oGRULayer
cuando la opción de entrenamientoSequenceLength
es un entero positivoObjetos
BatchNormalizationLayer
cuando la opción de entrenamientoBatchNormalizationStatistics
está establecida en'moving'
WorkerLoad
— División de carga de workers paralelos
escalar de 0
a 1
| entero positivo | Vector numérico
División de carga de workers paralelos entre las GPU o las CPU, especificada como una de las siguientes opciones:
Escalar de
0
a1
: fracción de workers en cada máquina que usar para el cálculo de entrenamiento de red neuronal. Si entrena la red neuronal usando datos de un almacén de datos de minilotes con distribución en segundo plano activada, los workers restantes buscan y preprocesan datos en segundo plano.Entero positivo: número de workers en cada máquina que usar para el cálculo de entrenamiento de red neuronal. Si entrena la red neuronal usando datos de un almacén de datos de minilotes con distribución en segundo plano activada, los workers restantes buscan y preprocesan datos en segundo plano.
Vector numérico: carga de entrenamiento de red neuronal para cada worker del grupo paralelo. Para un vector
W
, el workeri
recibe una fracciónW(i)/sum(W)
del trabajo (número de ejemplos por minilote). Si entrena una red neuronal usando datos de un almacén de datos de minilotes con distribución en segundo plano activada, puede asignar una carga de worker de 0 para usar ese worker para buscar datos en segundo plano. El vector especificado debe contener un valor por worker en el grupo paralelo.
Si el grupo paralelo tiene acceso a las GPU, los workers sin una GPU única no se utilizan nunca para el cálculo de entrenamiento. La opción predeterminada para grupos con varias GPU es usar todos los workers con una GPU única para el cálculo de entrenamiento y los workers restantes para la distribución en segundo plano. Si el grupo no tiene acceso a varias GPU y a varias CPU usadas para el entrenamiento, la opción predeterminada consiste en usar un worker por máquina para la distribución de datos en segundo plano.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
DispatchInBackground
— Indicador para habilitar la distribución en segundo plano
0
(falso) (predeterminado) | 1
(verdadero)
Indicador para habilitar la distribución en segundo plano (cola de precarga asíncrona) para leer datos de entrenamiento de almacenes de datos, especificado como 0
(falso) o 1
(verdadero). La distribución en segundo plano requiere Parallel Computing Toolbox.
DispatchInBackground
solo es compatible con almacenes de datos divisibles en particiones. Para obtener más información, consulte Use Datastore for Parallel Training and Background Dispatching.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
CheckpointPath
— Ruta para guardar las redes neuronales de puntos de control
""
(predeterminado) | vector de caracteres
Ruta para guardar las redes neuronales de puntos de control, especificada como un vector de caracteres o escalar de cadena.
Si no especifica una ruta (es decir, si usa la opción predeterminada
""
), el software no guarda ninguna red neuronal de puntos de control.Si especifica una ruta,
trainNetwork
guarda las redes neuronales de puntos de control en esta ruta y asigna un nombre único a cada red neuronal. Después, puede cargar cualquier red neuronal de puntos de control y retomar el entrenamiento desde esa red neuronal.Si la carpeta no existe, deberá crearla antes de especificar la ruta para guardar las redes neuronales de puntos de control. Si la ruta que especifica no existe,
trainingOptions
devuelve un error.
Las opciones CheckpointFrequency
y CheckpointFrequencyUnit
especifican la frecuencia con la que se guardan redes neuronales de puntos de control.
Para obtener más información sobre cómo guardar puntos de control de redes neuronales, consulte Save Checkpoint Networks and Resume Training.
Tipos de datos: char
| string
CheckpointFrequency
— Frecuencia con la que se guardan redes neuronales de puntos de control
1
(predeterminado) | entero positivo
Frecuencia con la que se guardan redes neuronales de puntos de control, especificada como un entero positivo.
Si CheckpointFrequencyUnit
es 'epoch'
, el software guarda las redes neuronales de puntos de control cada CheckpointFrequency
épocas.
Si CheckpointFrequencyUnit
es 'iteration'
, el software guarda las redes neuronales de puntos de control cada CheckpointFrequency
iteraciones.
Esta opción tiene efecto cuando CheckpointPath
no está vacío.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
CheckpointFrequencyUnit
— Unidad de frecuencia de punto de control
'epoch'
(predeterminado) | 'iteration'
Unidad de frecuencia de punto de control, especificada como 'epoch'
o 'iteration'
.
Si CheckpointFrequencyUnit
es 'epoch'
, el software guarda las redes neuronales de puntos de control cada CheckpointFrequency
épocas.
Si CheckpointFrequencyUnit
es 'iteration'
, el software guarda las redes neuronales de puntos de control cada CheckpointFrequency
iteraciones.
Esta opción tiene efecto cuando CheckpointPath
no está vacío.
OutputFcn
— Funciones de salida
identificador de función | arreglo de celdas de identificadores de función
Funciones de salida para llamar durante el entrenamiento, especificadas como identificador de función o arreglo de celdas de identificadores de función. trainNetwork
llama a las funciones especificadas una vez antes del inicio del entrenamiento, después de cada iteración y una vez cuando el entrenamiento ha finalizado. trainNetwork
pasa una estructura que contiene información en los siguientes campos:
Campo | Descripción |
---|---|
Epoch | Número de época actual |
Iteration | Número de iteración actual |
TimeSinceStart | Tiempo en segundos desde el inicio del entrenamiento |
TrainingLoss | Pérdida actual de minilotes |
ValidationLoss | Pérdida en los datos de validación |
BaseLearnRate | Tasa de aprendizaje base actual |
TrainingAccuracy | Precisión en el minilote actual (redes neuronales de clasificación) |
TrainingRMSE | RMSE en el minilote actual (redes neuronales de regresión) |
ValidationAccuracy | Precisión en los datos de validación (redes neuronales de clasificación) |
ValidationRMSE | RMSE en los datos de validación (redes neuronales de regresión) |
State | Estado de entrenamiento actual, con un posible valor de "start" , "iteration" o "done" . |
Si un campo no se calcula o no es relevante para una determinada llamada a las funciones de salida, este contiene un arreglo vacío.
Puede utilizar las funciones de salida para mostrar o representar información de progreso o para detener el entrenamiento. Para detener el entrenamiento antes de tiempo, haga que su función de salida devuelva 1
(verdadero). Si cualquier función de salida devuelve 1
(verdadero), el entrenamiento finaliza y trainNetwork
devuelve la red neuronal más reciente. Para ver un ejemplo de cómo utilizar funciones de salida, consulte Customize Output During Deep Learning Network Training.
Tipos de datos: function_handle
| cell
Argumentos de salida
options
— Opciones de entrenamiento
TrainingOptionsSGDM
| TrainingOptionsRMSProp
| TrainingOptionsADAM
Opciones de entrenamiento, devueltas como un objeto TrainingOptionsSGDM
, TrainingOptionsRMSProp
o TrainingOptionsADAM
. Para entrenar una red neuronal, use las opciones de entrenamiento como un argumento de entrada para la función trainNetwork
.
Si solverName
es 'sgdm'
, 'rmsprop'
o 'adam'
, las opciones de entrenamiento se devuelven como un objeto TrainingOptionsSGDM
, TrainingOptionsRMSProp
o TrainingOptionsADAM
, respectivamente.
Puede editar directamente las propiedades de la opción de entrenamiento de objetos TrainingOptionsSGDM
, TrainingOptionsADAM
y TrainingOptionsRMSProp
. Por ejemplo, para cambiar el tamaño de minilote después de usar la función trainingOptions
, puede editar la propiedad MiniBatchSize
directamente:
options = trainingOptions('sgdm'); options.MiniBatchSize = 64;
Sugerencias
Para la mayor parte de las tareas de deep learning, puede utilizar una red neuronal preentrenada y adaptarla a sus propios datos. Para ver un ejemplo de cómo usar la transferencia del aprendizaje para volver a entrenar una red neuronal convolucional para clasificar un nuevo conjunto de imágenes, consulte Entrenar redes de deep learning para clasificar nuevas imágenes. Como alternativa, puede crear y entrenar redes neuronales desde cero usando objetos
layerGraph
con las funcionestrainNetwork
ytrainingOptions
.Si la función
trainingOptions
no proporciona las opciones de entrenamiento que necesita para la tarea, puede crear un bucle de entrenamiento personalizado mediante diferenciación automática. Para obtener más información, consulte Define Deep Learning Network for Custom Training Loops.
Algoritmos
Pesos y sesgos iniciales
Para capas convolucionales y totalmente conectadas, la inicialización para los pesos y los sesgos se indica mediante las propiedades WeightsInitializer
y BiasInitializer
de las capas, respectivamente. Para ver ejemplos de cómo cambiar la inicialización para los pesos y los sesgos, consulte Specify Initial Weights and Biases in Convolutional Layer y Specify Initial Weights and Biases in Fully Connected Layer.
Gradiente descendente estocástico
El algoritmo de gradiente descendente estándar actualiza los parámetros de red (pesos y sesgos) para minimizar la función de pérdida realizando pequeños pasos en cada iteración en la dirección del gradiente negativo de la pérdida,
donde es el número de iteración, es la tasa de aprendizaje, es el vector de parámetros y es la función de pérdida. En el algoritmo de gradiente descendente estándar, el gradiente de la función de pérdida, , se evalúa utilizando todo el conjunto de entrenamiento y el algoritmo de gradiente descendente estándar usa todo el conjunto de datos al mismo tiempo.
En cambio, en cada iteración el algoritmo de gradiente descendente estocástico evalúa el gradiente y actualiza los parámetros mediante un subconjunto de los datos de entrenamiento. En cada iteración se usa un subconjunto diferente, llamado minilote. La pasada completa del algoritmo de entrenamiento por todo el conjunto de entrenamiento usando minilotes es una época. El gradiente descendente estocástico es estocástico porque las actualizaciones de parámetros calculadas usando un minilote son una estimación con ruido de la actualización de parámetros que resultaría de usar el conjunto de datos completo. Puede especificar el tamaño de minilote y el número máximo de épocas mediante las opciones de entrenamiento MiniBatchSize
y MaxEpochs
, respectivamente.
Gradiente descendente estocástico con momento
El algoritmo de gradiente descendente estocástico puede oscilar por la ruta del descenso más pronunciado hacia el valor óptimo. Añadir un término de momento a la actualización de parámetros es una forma de reducir esta oscilación [2]. La actualización de gradiente descendente estocástico con momento (SGDM) es
donde determina la contribución del paso de gradiente previo a la iteración actual. Puede especificar este valor mediante la opción de entrenamiento Momentum
. Para entrenar una red neuronal mediante el algoritmo de gradiente descendente estocástico con momento, especifique 'sgdm'
como el primer argumento de entrada para trainingOptions
. Para especificar el valor inicial de la tasa de aprendizaje α, use la opción de entrenamiento InitialLearnRate
. También puede especificar tasas de aprendizaje diferentes para distintas capas y parámetros. Para obtener más información, consulte Set Up Parameters in Convolutional and Fully Connected Layers.
RMSProp
El gradiente descendente estocástico con momento usa una única tasa de aprendizaje para todos los parámetros. Otros algoritmos de optimización buscan mejorar el entrenamiento de red usando tasas de aprendizaje que difieren según el parámetro y pueden adaptarse automáticamente a la función de pérdida que se optimiza. RMSProp (propagación del valor cuadrático medio) es uno de estos algoritmos. Mantiene una media móvil de los cuadrados a nivel de elemento de los gradientes de parámetros,
β2 es la tasa de decaimiento de la media móvil. Los valores comunes de la tasa de decaimiento son 0,9, 0,99 y 0,999. Las correspondientes longitudes medias de los gradientes cuadrados son iguales a 1/(1-β2), es decir, 10, 100 y 1000 actualizaciones de parámetros, respectivamente. Puede especificar β2 mediante la opción de entrenamiento SquaredGradientDecayFactor
. El algoritmo RMSProp utiliza esta media móvil para normalizar las actualizaciones de cada parámetro individualmente,
donde la división se realiza a nivel de elemento. Utilizando RMSProp se reducen de forma efectiva las tasas de aprendizaje de los parámetros con gradientes grandes y se incrementan las tasas de aprendizaje de los parámetros con gradientes pequeños. ɛ es una constante pequeña añadida para evitar la división entre cero. Puede especificar ɛ mediante la opción de entrenamiento Epsilon
, pero el valor predeterminado normalmente funciona bien. Para usar RMSProp para entrenar una red neuronal, especifique 'rmsprop'
como la primera entrada para trainingOptions
.
Adam
Adam (derivado de estimación de momento adaptativo) [4] usa una actualización de parámetros que es similar a RMSProp, pero con un término de momento añadido. Mantiene una media móvil a nivel de elemento tanto de los gradientes de parámetros como de sus valores cuadrados,
Puede especificar las tasas de decaimiento β1 y β2 mediante las opciones de entrenamiento GradientDecayFactor
y SquaredGradientDecayFactor
, respectivamente. Adam usa las medias móviles para actualizar los parámetros de red como
Si los gradientes a lo largo de varias iteraciones son similares, utilizar una media móvil del gradiente permite a las actualizaciones de parámetros coger impulso en una determinada dimensión. Si los gradientes contienen principalmente ruido, la media móvil del gradiente se reduce, por lo que las actualizaciones de parámetros también se reducen. Puede especificar ɛ mediante la opción de entrenamiento Epsilon
. El valor predeterminado normalmente funciona bien, pero para ciertos problemas, un valor tan grande como 1 funciona mejor. Para usar Adam para entrenar una red neuronal, especifique 'adam'
como la primera entrada para trainingOptions
. La actualización Adam completa incluye también un mecanismo para corregir un sesgo que aparece al principio del entrenamiento. Para obtener más información, consulte [4].
Especifique la tasa de aprendizaje α para todos los algoritmos de optimización mediante la opción de entrenamiento InitialLearnRate
. El efecto de la tasa de aprendizaje es diferente para los distintos algoritmos de optimización, de modo que las tasas de aprendizaje también son distintas en general. También puede especificar tasas de aprendizaje diferentes según las capas y los parámetros. Para obtener más información, consulte Set Up Parameters in Convolutional and Fully Connected Layers.
Recorte de gradiente
Si los gradientes aumentan de magnitud exponencialmente, el entrenamiento es inestable y puede divergir en unas pocas iteraciones. Esta "explosión de gradiente" se indica por medio de una pérdida de entrenamiento que va a NaN
o Inf
. El recorte de gradiente ayuda a evitar la explosión de gradiente estabilizando el entrenamiento en tasas de aprendizaje mayores y en presencia de valores atípicos [3]. El recorte de gradiente permite entrenar las redes más rápidamente y normalmente no afecta a la precisión de la tarea aprendida.
Hay dos tipos de recorte de gradiente.
El recorte de gradiente basado en normas vuelve a escalar el gradiente en base a un umbral y no cambia la dirección del gradiente. Los valores
'l2norm'
y'global-l2norm'
deGradientThresholdMethod
son métodos de recorte de gradiente basados en normas.El recorte de gradiente basado en valores acorta cualquier derivada parcial mayor que el umbral, lo que puede provocar que el gradiente cambie de dirección arbitrariamente. El recorte de gradiente basado en valores puede tener un comportamiento impredecible, pero los cambios suficientemente pequeños no hacen que la red diverja. El valor
'absolute-value'
deGradientThresholdMethod
es un método de recorte de gradiente basado en valores.
Regularización L2
Añadir un término de regularización para los pesos a la función de pérdida es una forma de reducir el sobreajuste [1], [2]. El término de regularización también se llama decaimiento de peso. La función de pérdida con el término de regularización toma la forma
donde es el vector de peso, es el factor de regularización (coeficiente) y la función de regularización es
Tenga en cuenta que los sesgos no están regularizados [2]. Puede especificar el factor de regularización mediante la opción de entrenamiento L2Regularization
. También puede especificar factores de regularización diferentes para distintas capas y parámetros. Para obtener más información, consulte Set Up Parameters in Convolutional and Fully Connected Layers.
La función de pérdida que el software utiliza para el entrenamiento de red incluye el término de regularización. No obstante, el valor de pérdida mostrado en la ventana de comandos y la gráfica de progreso del entrenamiento durante el entrenamiento es solo la pérdida en los datos y no incluye el término de regularización.
Referencias
[1] Bishop, C. M. Pattern Recognition and Machine Learning. Springer, New York, NY, 2006.
[2] Murphy, K. P. Machine Learning: A Probabilistic Perspective. The MIT Press, Cambridge, Massachusetts, 2012.
[3] Pascanu, R., T. Mikolov, and Y. Bengio. "On the difficulty of training recurrent neural networks". Proceedings of the 30th International Conference on Machine Learning. Vol. 28(3), 2013, pp. 1310–1318.
[4] Kingma, Diederik, and Jimmy Ba. "Adam: A method for stochastic optimization." arXiv preprint arXiv:1412.6980 (2014).
Historial de versiones
Introducido en R2016aR2022b: trainNetwork
rellena minilotes hasta la longitud de la secuencia más larga antes de dividirla cuando se especifica la opción de entrenamiento SequenceLength
como un número entero
A partir de la versión R2022b, cuando se entrena una red neuronal con datos secuenciales utilizando la función trainNetwork
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 el entrenamiento de la red neuronal en unidades de tiempo que contengan solo valores de relleno.
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, utilice un ciclo de entrenamiento personalizado e implemente este comportamiento al preprocesar minilotes de datos.
R2018b: El valor predeterminado de la opción de entrenamiento ValidationPatience
es Inf
A partir de la versión R2018b, el valor predeterminado de la opción de entrenamiento ValidationPatience
es Inf
, lo que significa que la detención automática mediante validación está desactivada. Este comportamiento evita que el entrenamiento se detenga antes de haber obtenido un aprendizaje suficiente de los datos.
En versiones anteriores, el valor predeterminado es 5
. Para reproducir este comportamiento, establezca la opción ValidationPatience
en 5
.
R2018b: Diferente nombre de archivo para redes de puntos de control
A partir de la versión R2018b, al guardar redes de puntos de control, el software asigna nombres de archivo que empiezan por net_checkpoint_
. En versiones anteriores, el software asigna nombres de archivo que empiezan por convnet_checkpoint_
.
Si tiene código que guarda y carga redes de puntos de control, actualice su código para cargar archivos con el nuevo nombre.
Consulte también
trainNetwork
| analyzeNetwork
| Deep Network Designer
Temas
- Crear una red neuronal de deep learning sencilla para clasificación
- Transferencia del aprendizaje mediante una red preentrenada
- Resume Training from Checkpoint Network
- Deep learning con big data en CPU, GPU, en paralelo y en la nube
- Specify Layers of Convolutional Neural Network
- Set Up Parameters and Train Convolutional Neural Network
- Define Custom Training Loops, Loss Functions, and Networks
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)