En la mayoría de los modelos, hay un parámetro de pasos que indica el número de pasos para ejecutar sobre los datos . Pero aún veo en el uso más práctico, también ejecutamos la función de ajuste N epochs .
¿Cuál es la diferencia entre ejecutar 1000 pasos con 1 época y ejecutar 100 pasos con 10 épocas? ¿Cuál es mejor en la práctica? ¿Algún cambio lógico entre épocas consecutivas? ¿Mezcla de datos?
Respuestas:
Una época generalmente significa una iteración sobre todos los datos de entrenamiento. Por ejemplo, si tiene 20,000 imágenes y un tamaño de lote de 100, la época debe contener 20,000 / 100 = 200 pasos. Sin embargo, generalmente solo establezco un número fijo de pasos como 1000 por época, aunque tengo un conjunto de datos mucho más grande. Al final de la época verifico el costo promedio y, si mejora, guardo un punto de control. No hay diferencia entre los pasos de una época a otra. Solo los trato como puntos de control.
La gente a menudo baraja el conjunto de datos entre épocas. Prefiero usar la función random.sample para elegir los datos a procesar en mis épocas. Digamos que quiero hacer 1000 pasos con un tamaño de lote de 32. Solo elegiré al azar 32,000 muestras del grupo de datos de entrenamiento.
fuente
Un paso de entrenamiento es una actualización de gradiente. En un solo paso, se procesan muchos ejemplos.
Una época consiste en un ciclo completo a través de los datos de entrenamiento. Esto suele ser muchos pasos. Como ejemplo, si tiene 2.000 imágenes y utiliza un tamaño de lote de 10, una época consta de 2.000 imágenes / (10 imágenes / paso) = 200 pasos.
Si elige nuestra imagen de entrenamiento al azar (e independiente) en cada paso, normalmente no lo llamará época. [Aquí es donde mi respuesta difiere de la anterior. También vea mi comentario.]
fuente
Como actualmente estoy experimentando con la API tf.estimator, me gustaría agregar mis hallazgos húmedos aquí también. Todavía no sé si el uso de los parámetros de pasos y épocas es consistente en todo TensorFlow y, por lo tanto, solo me estoy relacionando con tf.estimator (específicamente tf.estimator.LinearRegressor) por ahora.
Pasos de entrenamiento definidos por
num_epochs
:steps
no explícitamenteComentario: he configurado
num_epochs=1
la entrada de entrenamiento y la entrada de documentación paranumpy_input_fn
me dice "num_epochs: Entero, número de épocas para iterar sobre los datos. SiNone
se ejecutará para siempre". . Ennum_epochs=1
el ejemplo anterior, el entrenamiento se ejecuta exactamente x_train.size / batch_size times / steps (en mi caso, esto era 175000 pasos,x_train
tenía un tamaño de 700000 ybatch_size
era 4).Pasos de entrenamiento definidos por
num_epochs
:steps
explícitamente definido mayor que el número de pasos implícitamente definidos pornum_epochs=1
Comentario:
num_epochs=1
en mi caso significaría 175000 pasos ( x_train.size / batch_size con x_train.size = 700,000 y batch_size = 4 ) y este es exactamente el número de pasos,estimator.train
aunque el parámetro de pasos se estableció en 200,000estimator.train(input_fn=train_input, steps=200000)
.Pasos de entrenamiento definidos por
steps
Comentario: aunque lo he configurado
num_epochs=1
al llamar,numpy_input_fn
el entrenamiento se detiene después de 1000 pasos. Esto se debe a questeps=1000
enestimator.train(input_fn=train_input, steps=1000)
sobrescribe elnum_epochs=1
intf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
.Conclusión : Sean cuales sean los parámetros
num_epochs
paratf.estimator.inputs.numpy_input_fn
ysteps
paraestimator.train
definir, el límite inferior determina el número de pasos que se ejecutarán.fuente
En palabras sencillas
Epoch: Epoch se considera como el número de una pasada de todo el conjunto de datos
Pasos: En el flujo de tensor, uno de los pasos se considera como el número de épocas multiplicado por ejemplos dividido por el tamaño del lote
fuente
Época: una época de entrenamiento representa un uso completo de todos los datos de entrenamiento para el cálculo de gradientes y optimizaciones (entrenar el modelo).
Paso: Un paso de entrenamiento significa usar un tamaño de lote de datos de entrenamiento para entrenar el modelo.
Número de pasos de entrenamiento por época:
total_number_of_training_examples
/batch_size
.Número total de pasos de entrenamiento:
number_of_epochs
xNumber of training steps per epoch
.fuente
Como todavía no hay una respuesta aceptada: por defecto, una época recorre todos sus datos de entrenamiento. En este caso, tiene n pasos, con n = Training_lenght / batch_size.
Si sus datos de entrenamiento son demasiado grandes, puede decidir limitar el número de pasos durante una época. [ Https://www.tensorflow.org/tutorials/structured_data/time_series?_sm_byp=iVVF1rD6n2Q68VSN]
Cuando el número de pasos alcanza el límite establecido, el proceso comenzará de nuevo, comenzando la próxima época. Cuando trabaja en TF, sus datos generalmente se transforman primero en una lista de lotes que se enviarán al modelo para su capacitación. En cada paso procesas un lote.
En cuanto a si es mejor establecer 1000 pasos para 1 época o 100 pasos con 10 épocas, no sé si hay una respuesta directa. Pero aquí hay resultados sobre la capacitación de una CNN con ambos enfoques utilizando los tutoriales de datos de la serie de tiempo TensorFlow:
En este caso, ambos enfoques conducen a predicciones muy similares, solo los perfiles de entrenamiento difieren.
pasos = 20 / épocas = 100
pasos = 200 / épocas = 10
fuente