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: stepsno 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=1la entrada de entrenamiento y la entrada de documentación para numpy_input_fnme dice "num_epochs: Entero, número de épocas para iterar sobre los datos. Si Nonese ejecutará para siempre". . En num_epochs=1el ejemplo anterior, el entrenamiento se ejecuta exactamente x_train.size / batch_size times / steps (en mi caso, esto era 175000 pasos, x_traintenía un tamaño de 700000 y batch_sizeera 4).
Pasos de entrenamiento definidos por num_epochs: stepsexplí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=1en 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.trainaunque 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=1al llamar, numpy_input_fnel entrenamiento se detiene después de 1000 pasos. Esto se debe a que steps=1000en estimator.train(input_fn=train_input, steps=1000)sobrescribe el num_epochs=1in 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_epochspara tf.estimator.inputs.numpy_input_fny stepspara estimator.traindefinir, el límite inferior determina el número de pasos que se ejecutarán.