¿Cómo funciona el parámetro validation_split de la función de ajuste de Keras?

17

La división de validación en la función de ajuste del modelo secuencial de Keras se documenta de la siguiente manera en https://keras.io/models/sequential/ :

validation_split: flota entre 0 y 1. Fracción de los datos de entrenamiento que se utilizarán como datos de validación. El modelo separará esta fracción de los datos de entrenamiento, no se entrenará en ellos y evaluará la pérdida y cualquier métrica del modelo en estos datos al final de cada época. Los datos de validación se seleccionan de las últimas muestras en los datos x e y proporcionados, antes de barajar.

Tenga en cuenta la última línea:

Los datos de validación se seleccionan de las últimas muestras en los datos x e y proporcionados, antes de barajar.

¿Significa que los datos de validación siempre son fijos y se toman de la parte inferior del conjunto de datos principal?

¿Hay alguna forma de seleccionar al azar una fracción dada de datos del conjunto de datos principal?

rnso
fuente

Respuestas:

17

En realidad, no querrá volver a muestrear su conjunto de validación después de cada época. Si hiciera esto, su modelo recibiría capacitación en cada muestra de su conjunto de datos y, por lo tanto, esto provocaría un sobreajuste. Desea siempre dividir sus datos antes del proceso de entrenamiento y luego el algoritmo solo debe entrenarse utilizando el subconjunto de datos para el entrenamiento.

La función tal como está diseñada asegura que los datos se separen de tal manera que siempre entrenen en la misma porción de datos para cada época. Todos los cambios se realizan dentro de la muestra de entrenamiento entre épocas si se elige esa opción.

Sin embargo, para algunos conjuntos de datos, obtener las últimas instancias no es útil, específicamente si el conjunto de datos se reagrupa según la clase. Entonces la distribución de sus clases será sesgada. Por lo tanto, necesitará algún tipo de forma aleatoria para extraer un subconjunto de datos para obtener distribuciones de clase equilibradas en el conjunto de capacitación y validación. Para esto siempre me gusta usar la función sklearn de la siguiente manera

from sklearn.model_selection import train_test_split

# Split the data
x_train, x_valid, y_train, y_valid = train_test_split(data, labels, test_size=0.33, shuffle= True)

Es una buena función fácil de usar que hace lo que quieres. Las variables datay labelsson matrices numpy estándar, siendo la primera dimensión las instancias.

JahKnows
fuente
1
No me refería a obtener un conjunto de pruebas diferente después de cada época. Le pregunté sobre cómo obtener datos del final del conjunto de datos, ya que muchos conjuntos de datos pueden organizarse de acuerdo con la clase (como mencionó). Lo sé train_test_splity ahora confirmas que este es un mejor método, ya que obtendrá al azar datos de prueba / validación del conjunto de datos.
rnso
@rnso, desafortunadamente Keras no brinda esa opción. Supongo que no está realmente dentro del alcance de lo que quieren ofrecer. Haría la implementación un poco confusa al tener 2 entradas de métodos diferentes con aleatorio en el nombre.
JahKnows
¿No mezcló la definición de validación y los datos de prueba utilizando ese train_test_spli?
bagustris
Si se utiliza el shuffleparámetro, usted también utilizar shuffleen el .fitde un modelo Keras?
Shamoon