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ícitamente
estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input = tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input)
Comentario: he configurado num_epochs=1
la entrada de entrenamiento y la entrada de documentación para numpy_input_fn
me dice "num_epochs: Entero, número de épocas para iterar sobre los datos. Si None
se ejecutará para siempre". . En num_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 y batch_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
estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input = tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input, steps=200000)
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,000 estimator.train(input_fn=train_input, steps=200000)
.
Pasos de entrenamiento definidos por steps
estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input = tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input, steps=1000)
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 que steps=1000
en estimator.train(input_fn=train_input, steps=1000)
sobrescribe el num_epochs=1
in tf.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
para tf.estimator.inputs.numpy_input_fn
y steps
para estimator.train
definir, el límite inferior determina el número de pasos que se ejecutarán.