train
Entrenar una red neuronal superficial
Sintaxis
Descripción
Esta función entrena una red neuronal superficial. Para el entrenamiento de redes de deep learning, como las redes convolucionales o LSTM, utilice la función trainnet
.
[
entrena una red con opciones adicionales especificadas por uno o más argumentos de par nombre-valor.trainedNet
,tr
] = train(net
,X
,T
,Xi
,Ai
,EW
,Name,Value
)
Ejemplos
Entrenar y representar redes
Aquí, la entrada x
y los objetivos t
definen una función simple que puede representar:
x = [0 1 2 3 4 5 6 7 8];
t = [0 0.84 0.91 0.14 -0.77 -0.96 -0.28 0.66 0.99];
plot(x,t,'o')
Aquí, feedforwardnet
crea una red prealimentada de dos capas. La red tiene una capa oculta con diez neuronas.
net = feedforwardnet(10); net = configure(net,x,t); y1 = net(x) plot(x,t,'o',x,y1,'x')
La red se entrena y, después, se resimula.
net = train(net,x,t); y2 = net(x) plot(x,t,'o',x,y1,'x',x,y2,'*')
Entrenar una red de serie de tiempo NARX
Este ejemplo entrena una red autorregresiva no lineal de lazo abierto con entrada externa para modelar un sistema de levitación magnética definido por una corriente de control x
y la respuesta de posición vertical t
del imán; después, simula la red. La función preparets
prepara los datos antes del entrenamiento y la simulación. Crea las entradas combinadas xo
de la red de lazo abierto, que contienen tanto la entrada externa x
como los valores de posición t
anteriores. También prepara los estados de retardo xi
.
[x,t] = maglev_dataset; net = narxnet(10); [xo,xi,~,to] = preparets(net,x,{},t); net = train(net,xo,to,xi); y = net(xo,xi)
Este mismo sistema se puede simular también en forma de lazo cerrado.
netc = closeloop(net); view(netc) [xc,xi,ai,tc] = preparets(netc,x,{},t); yc = netc(xc,xi,ai);
Entrenar una red en paralelo con un grupo paralelo
Si tiene recursos de hardware que no se están usando durante el entrenamiento, podría entrenar su red más rápido y usar un conjunto de datos que, de otra forma, no cabría en la memoria mediante el entrenamiento en paralelo. Entrenar una red en paralelo requiere Parallel Computing Toolbox™ y solo es compatible con el entrenamiento mediante retropropagación, y no con mapas autoorganizados.
Aquí, el entrenamiento y la simulación tienen lugar en workers paralelos de MATLAB.
[X,T] = vinyl_dataset; net = feedforwardnet(10); net = train(net,X,T,'useParallel','yes','showResources','yes'); Y = net(X);
Utilice valores compuestos para distribuir manualmente los datos y obtener los resultados como un valor compuesto. Si se cargan los datos a la vez que se distribuyen, aunque cada elemento del conjunto de datos debe caber en la RAM, el conjunto de datos completo solo está limitado por la RAM total de todos los workers.
[X,T] = vinyl_dataset; Q = size(X,2); Xc = Composite; Tc = Composite; numWorkers = numel(Xc); ind = [0 ceil((1:numWorkers)*(Q/numWorkers))]; for i=1:numWorkers indi = (ind(i)+1):ind(i+1); Xc{i} = X(:,indi); Tc{i} = T(:,indi); end net = feedforwardnet; net = configure(net,X,T); net = train(net,Xc,Tc); Yc = net(Xc);
Observe en el ejemplo anterior que la función configure
se empleó para establecer las dimensiones y los ajustes de procesamiento de las entradas de la red. Normalmente, esto sucede de forma automática cuando se llama a train, pero cuando se proporcionan datos compuestos, este paso debe realizarse manualmente con datos no compuestos.
Entrenar una red con varias GPU
Las redes se pueden entrenar utilizando el dispositivo con GPU actual, si Parallel Computing Toolbox lo admite. Actualmente, el entrenamiento con GPU solo es compatible con la retroprogramación, no con mapas autoorganizados.
[X,T] = vinyl_dataset; net = feedforwardnet(10); net = train(net,X,T,'useGPU','yes'); y = net(X);
Para introducir datos manualmente en una GPU:
[X,T] = vinyl_dataset; Xgpu = gpuArray(X); Tgpu = gpuArray(T); net = configure(net,X,T); net = train(net,Xgpu,Tgpu); Ygpu = net(Xgpu); Y = gather(Ygpu);
Observe en el ejemplo anterior que la función configure se empleó para establecer las dimensiones y los ajustes de procesamiento de las entradas de la red. Normalmente, esto sucede de forma automática cuando se llama a train, pero cuando se proporcionan datos gpuArray, este paso debe realizarse manualmente con datos que no son gpuArray.
Para ejecutar en paralelo, con los workers asignados a una GPU única diferente cada uno y workers adicionales que se ejecutan en una CPU:
net = train(net,X,T,'useParallel','yes','useGPU','yes'); y = net(X);
Utilizar solo workers con GPU únicas puede dar lugar a una velocidad mayor, ya que puede que los workers de la CPU no sigan el ritmo.
net = train(net,X,T,'useParallel','yes','useGPU','only'); Y = net(X);
Entrenar la red con guardados de punto de control
En el siguiente ejemplo se ha entrenado una red con puntos de control guardados a una velocidad no mayor que una vez cada dos minutos.
[x,t] = vinyl_dataset; net = fitnet([60 30]); net = train(net,x,t,'CheckpointFile','MyCheckpoint','CheckpointDelay',120);
Después de un fallo del ordenador, se puede recuperar la red más reciente y utilizarla para continuar el entrenamiento desde el momento del fallo. El archivo de punto de control incluye una variable de estructura checkpoint
, que incluye la red, el registro de entrenamiento, el nombre de archivo, la hora y el número.
[x,t] = vinyl_dataset; load MyCheckpoint net = checkpoint.net; net = train(net,x,t,'CheckpointFile','MyCheckpoint');
Argumentos de entrada
net
— Red de entrada
objeto network
Red de entrada, especificada como un objeto network
. Para crear un objeto network
, use feedforwardnet
o narxnet
, por ejemplo.
X
— Entradas de la red
matriz | arreglo de celdas | datos compuestos | gpuArray
Entradas de la red, especificadas como una matriz de R
por Q
o como un arreglo de celdas de Ni
por TS
, donde
R
es el tamaño de entradaQ
es el tamaño de loteNi = net.numInputs
TS
es el número de unidades de tiempo
Los argumentos de train
pueden tener dos formatos: matrices, para problemas estáticos y redes con entradas y salidas únicas, y arreglos de celdas, para múltiples unidades de tiempo y redes con entradas y salidas múltiples.
El formato de matriz se puede usar si solo hay que simular una unidad de tiempo (
TS = 1
). Resulta conveniente para redes con una única entrada y una única salida, pero se puede usar con redes que tengan más. Cuando la red tiene múltiples entradas, el tamaño de matriz es (suma deRi
) porQ
.El formato de arreglo de celdas es más general y más conveniente para redes con múltiples entradas y salidas, lo que permite presentar secuencias de entradas. Cada elemento
X{i,ts}
es una matriz deRi
porQ
, dondeRi = net.inputs{i}.size
.
Si se usan datos compuestos, 'useParallel'
se establece automáticamente en 'yes'
. La función toma datos compuestos y devuelve resultados compuestos.
Si se usan datos gpuArray, 'useGPU'
se establece automáticamente en 'yes'
. La función toma datos gpuArray y devuelve resultados gpuArray.
Nota
Si una columna de X contiene al menos un NaN
, train
no utiliza esa columna para entrenamiento, pruebas ni validación.
T
— Objetivos de la red
ceros (predeterminado) | matriz | arreglo de celdas | datos compuestos | gpuArray
Objetivos de la red, especificados como una matriz de U
por Q
o como un arreglo de celdas de No
por TS
, donde
U
es el tamaño de salidaQ
es el tamaño de loteNo = net.numOutputs
TS
es el número de unidades de tiempo
Los argumentos de train
pueden tener dos formatos: matrices, para problemas estáticos y redes con entradas y salidas únicas, y arreglos de celdas, para múltiples unidades de tiempo y redes con entradas y salidas múltiples.
El formato de matriz se puede usar si solo hay que simular una unidad de tiempo (
TS = 1
). Resulta conveniente para redes con una única entrada y una única salida, pero se puede usar con redes que tengan más. Cuando la red tiene múltiples entradas, el tamaño de matriz es (suma deUi
) porQ
.El formato de arreglo de celdas es más general y más conveniente para redes con múltiples entradas y salidas, lo que permite presentar secuencias de entradas. Cada elemento
T{i,ts}
es una matriz deUi
porQ
, dondeUi = net.outputs{i}.size
.
Si se usan datos compuestos, 'useParallel'
se establece automáticamente en 'yes'
. La función toma datos compuestos y devuelve resultados compuestos.
Si se usan datos gpuArray, 'useGPU'
se establece automáticamente en 'yes'
. La función toma datos gpuArray y devuelve resultados gpuArray.
Observe que T
es opcional y que solo hay que usarlo para redes que requieren objetivos.
Nota
Cualquier valor NaN
en los objetivos T
se trata como datos faltantes. Si un elemento de T
es NaN
, ese elemento no se utiliza para entrenamiento, pruebas ni validación.
Xi
— Condiciones de retardo de entrada iniciales
ceros (predeterminado) | arreglo de celdas | matriz
Condiciones de retardo de entrada iniciales, especificadas como un arreglo de celdas de Ni
por ID
o como una matriz de R
por (ID*Q)
, donde
ID = net.numInputDelays
Ni = net.numInputs
R
es el tamaño de entradaQ
es el tamaño de lote
Para entradas en forma de arreglo de celdas, las columnas de Xi
se ordenan desde el estado de retardo más antiguo hasta el más reciente. Xi{i,k}
es la entrada i
en el momento ts = k - ID
.
Xi
también es opcional y solo hay que usarlo para redes que tienen retardos de entrada o de capa.
Ai
— Condiciones de retardo de capa iniciales
ceros (predeterminado) | arreglo de celdas | matriz
Condiciones de retardo de capa iniciales, especificadas como un arreglo de celdas de Nl
por LD
o como una matriz de (suma de Si
) por (LD*Q
), donde
Nl = net.numLayers
LD = net.numLayerDelays
Si = net.layers{i}.size
Q
es el tamaño de lote
Para entradas en forma de arreglo de celdas, las columnas de Ai
se ordenan desde el estado de retardo más antiguo hasta el más reciente. Ai{i,k}
es la salida de capa i
en el momento ts = k - LD
.
EW
— Pesos de errores
arreglo de celdas
Pesos de errores, especificados como un arreglo de celdas de No
por TS
o como una matriz de (suma de Ui
) por Q
, donde
No = net.numOutputs
TS
es el número de unidades de tiempoUi = net.outputs{i}.size
Q
es el tamaño de lote
Para entradas en forma de arreglo de celdas, cada elemento EW{i,ts}
es una matriz de Ui
por Q
, donde
Ui = net.outputs{i}.size
Q
es el tamaño de lote
Los pesos de errores EW
también pueden tener un tamaño de 1 para todos o para cualquiera de los elementos No
, TS
, Ui
o Q
. En ese caso, se extienden automáticamente las dimensiones de EW
para que coincidan con los objetivos T
. Esto permite ponderar de forma práctica la importancia en cualquier dimensión (como por muestra) manteniendo la misma importancia en otra (como el tiempo, con TS=1
). Si todas las dimensiones son 1, por ejemplo, si EW = {1}
, todos los valores objetivo se tratan con la misma importancia. Ese es el valor predeterminado de EW
.
Según se indica arriba, los pesos de errores EW
pueden ser de las mismas dimensiones que los objetivos T
o tener algunas dimensiones establecidas en 1. Por ejemplo, si EW
es de 1 por Q
, las muestras objetivo tendrán distintas importancias, pero cada elemento de una muestra tendrá la misma importancia. Si EW
es (suma de Ui
) por 1, cada elemento de salida tiene una importancia diferente y todas las muestras se tratan con la misma importancia.
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: 'useParallel','yes'
useParallel
— Opción para especificar cálculos paralelos
'no'
(predeterminado) | 'yes'
Opción para especificar cálculos paralelos, especificada como 'yes'
o 'no'
.
'no'
: los cálculos tienen lugar en el hilo normal de MATLAB. Este es el ajuste de'useParallel'
por defecto.'yes'
: los cálculos tienen lugar en workers paralelos si hay un grupo paralelo abierto. Si no hay ningún grupo paralelo abierto, el software inicia uno mediante el perfil de cluster predeterminado.
useGPU
— Opción para especificar cálculos con GPU
'no'
(predeterminado) | 'yes'
| 'only'
Opción para especificar cálculos con GPU, especificada como 'yes'
, 'no'
u 'only'
.
'no'
: los cálculos tienen lugar en la CPU. Este es el ajuste de'useGPU'
por defecto.'yes'
: los cálculos tienen lugar en elgpuDevice
actual, si se trata de una GPU compatible (consulte los requisitos de GPU en Parallel Computing Toolbox). Si no se admite elgpuDevice
actual, los cálculos permanecen en la CPU. Si'useParallel'
es también'yes'
y si hay un grupo paralelo abierto, cada worker con una GPU única utiliza esa GPU; otros workers ejecutan cálculos en sus núcleos de CPU correspondientes.'only'
: si no hay ningún grupo paralelo abierto, este ajuste es el mismo que'yes'
. Si hay un grupo paralelo abierto, solo se usan workers con GPU únicas. Sin embargo, si hay un grupo paralelo abierto, pero no hay GPU compatibles disponibles, los cálculos vuelven a realizarse en todas las CPU de los workers.
showResources
— Opción para mostrar recursos
'no'
(predeterminado) | 'yes'
Opción para mostrar recursos, especificada como 'yes'
o 'no'
.
'no'
: no muestra los recursos de cálculo utilizados en la línea de comandos. Este es el ajuste por defecto.'yes'
: muestra en la línea de comandos un resumen de todos los recursos de cálculo utilizados realmente. Los recursos reales pueden diferir de los solicitados si se solicita cálculo paralelo o de GPU, pero no hay un grupo paralelo abierto, o si no hay una GPU admitida disponible. Cuando se utilizan workers paralelos, se describe el modo de cálculo de cada worker, incluidos los workers del grupo que no se utilizan.
reduction
— Reducción de la memoria
1 (predeterminado) | entero positivo
Reducción de la memoria, especificada como un entero positivo.
En la mayoría de las redes neuronales, el modo de cálculo de entrenamiento con CPU por defecto es un algoritmo MEX compilado. Sin embargo, para redes grandes, puede que los cálculos no tengan lugar con un modo de cálculo de MATLAB®. Esto se puede confirmar utilizando 'showResources'
. Si se está utilizando MATLAB y la memoria es un problema, establecer la opción de reducción en un valor N mayor que 1 reduce en gran medida el almacenamiento temporal requerido para entrenar por un factor de N a cambio de tiempos de entrenamiento más largos.
CheckpointFile
— Archivo de punto de control
''
(predeterminado) | vector de caracteres
Archivo de punto de control, especificado como un vector de caracteres.
El valor para 'CheckpointFile'
se puede establecer en un nombre de archivo para guardar en la carpeta de trabajo actual, en una ruta de archivo de otra carpeta o en una cadena vacía para deshabilitar el guardado del punto de control (valor predeterminado).
CheckpointDelay
— Retardo de punto de control
60 (predeterminado) | Entero no negativo
Retardo de punto de control, especificado como entero no negativo.
El parámetro opcional 'CheckpointDelay'
limita la frecuencia con la que se guarda. Limitar la frecuencia de los puntos de control puede mejorar la eficiencia, manteniendo la cantidad de tiempo durante la que se guardan los puntos de control baja en comparación con el tiempo dedicado a los cálculos. Tiene un valor predeterminado de 60, lo que significa que los guardados del punto de control no tienen lugar más de una vez por minuto. Establezca el valor de 'CheckpointDelay'
en 0 si desea que los guardados del punto de control tengan lugar una vez por época.
Argumentos de salida
trainedNet
— Red entrenada
objeto network
Red entrenada, devuelta como un objeto network
.
tr
— Registro de entrenamiento
Estructura
Registro de entrenamiento (epoch
y perf
), devuelto como una estructura cuyos campos dependen de la función de entrenamiento de la red (net.NET.trainFcn
). Puede incluir campos como los siguientes:
Funciones y parámetros de entrenamiento, división de datos y rendimiento
Índices de división de datos para conjuntos de entrenamiento, validación y prueba
Máscaras de división de datos para conjuntos de entrenamiento, validación y prueba
Número de épocas (
num_epochs
) y la mejor época (best_epoch
)Una lista de los nombres de estado de entrenamiento (
states
)Los campos de cada nombre de estado que registra su valor durante el entrenamiento
Mejores rendimientos de la red, evaluados en cada época: mejor rendimiento en el conjunto de entrenamiento (
best_perf
), mejor rendimiento en el conjunto de validación (best_vperf
) y mejor rendimiento en el conjunto de prueba (best_tperf
)
Algoritmos
train
llama a la función que indica net.trainFcn
utilizando los valores de parámetros de entrenamiento que indica net.trainParam
.
Una época de entrenamiento suele definirse como una presentación única de todos los vectores de entrada a la red. Después, la red se actualiza según los resultados de todas esas presentaciones.
El entrenamiento tiene lugar hasta que se produce un número máximo de épocas, se cumple el objetivo de rendimiento o se da cualquier otra condición de parada de la función net.trainFcn
.
Algunas funciones de entrenamiento se desvían de esta norma y presentan un único vector de entrada (o secuencia) cada época. Se selecciona un vector de entrada (o secuencia) de forma aleatoria para cada época de los vectores de entrada concurrentes (o secuencias). competlayer
devuelve redes que utilizan trainru
, una función de entrenamiento que hace esto.
Historial de versiones
Introducido antes de R2006a
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)