Main Content

Dividir datos para realizar un entrenamiento de red neuronal óptimo

En este tema se presenta parte del flujo de trabajo de una red multicapa típica. Para obtener más información y otros pasos, consulte Redes neuronales superficiales multicapa y entrenamiento de retropropagación.

Por lo general, al entrenar redes multicapa, primero se dividen los datos en tres subconjuntos. El primer subconjunto es el conjunto de entrenamiento, que se usa para calcular el gradiente y actualizar los pesos y los sesgos de la red. El segundo subconjunto es el conjunto de validación. El error del conjunto de validación se monitoriza durante el proceso de entrenamiento. El error de validación suele disminuir durante la fase inicial de entrenamiento, al igual que el error del conjunto de entrenamiento. Sin embargo, cuando la red comienza a sobreajustar los datos, el error del conjunto de validación suele aumentar. Los pesos y sesgos de la red se guardan en el mínimo del error del conjunto de validación. Esta técnica se analiza con más detalle en Improve Shallow Neural Network Generalization and Avoid Overfitting.

El error del conjunto de prueba no se utiliza durante el entrenamiento, sino para comparar diferentes modelos. También es útil para representar el error del conjunto de prueba durante el proceso de entrenamiento. Si el error del conjunto de prueba alcanza un mínimo en un número de iteración significativamente diferente del error del conjunto de validación, podría indicar que el conjunto de datos no se ha dividido correctamente.

Existen cuatro funciones para dividir datos en conjuntos de entrenamiento, validación y prueba. Son dividerand (predeterminada), divideblock, divideint y divideind. La división de datos se suele realizar automáticamente al entrenar la red.

Función

Algoritmo

dividerand

Dividir los datos de forma aleatoria (predeterminado)

divideblock

Dividir los datos en bloques contiguos

divideint

Dividir los datos utilizando una selección intercalada

divideind

Dividir los datos por índice

Puede acceder o cambiar la función de división de su red con esta propiedad:

net.divideFcn

Cada una de las funciones de división utiliza parámetros que personalizan su comportamiento. Estos valores se guardan y pueden cambiarse mediante la siguiente propiedad de red:

net.divideParam

Se accede automáticamente a la función de división cuando se entrena la red y se utiliza para dividir los datos en subconjuntos de entrenamiento, validación y prueba. Si net.divideFcn se establece en 'dividerand' (predeterminada), se dividen los datos de forma aleatoria en tres subconjuntos utilizando los parámetros de división net.divideParam.trainRatio, net.divideParam.valRatio y net.divideParam.testRatio. La fracción de los datos que se encuentra en el conjunto de entrenamiento es trainRatio/(trainRatio+valRatio+testRatio). La fórmula de los otros dos conjuntos es muy similar. Las ratios predeterminadas para el entrenamiento, prueba y validación son 0,7, 0,15 y 0,15, respectivamente.

Si net.divideFcn se establece en 'divideblock', se dividen los datos en tres subconjuntos utilizando tres bloques contiguos del conjunto de datos original (donde el entrenamiento conforma el primer bloque, la validación el segundo y la prueba el tercero). La fracción de los datos originales que se destina a cada subconjunto se determina por los mismos parámetros de tripartición utilizados en dividerand.

Si net.divideFcn se establece en 'divideint', los datos se dividen mediante un método intercalado, como si se repartiera una baraja de cartas. Se hace así para que cada uno de los tres subconjuntos tenga diferentes porcentajes de datos. La fracción de los datos originales que se destina a cada subconjunto se determina por los mismos parámetros de tripartición utilizados en dividerand.

Cuando net.divideFcn se establece en 'divideind', los datos se dividen por índice. Los índices de los tres subconjuntos se definen por los parámetros de división net.divideParam.trainInd, net.divideParam.valInd y net.divideParam.testInd. La asignación predeterminada de estos índices es el arreglo nulo, por lo que debe configurarlos cuando utilice esta opción.