Da ich gerade mit der tf.estimator-API experimentiere, möchte ich auch hier meine feuchten Erkenntnisse hinzufügen. Ich weiß noch nicht, ob die Verwendung von Schritten und Epochenparametern in TensorFlow konsistent ist, und daher beziehe ich mich vorerst nur auf tf.estimator (speziell tf.estimator.LinearRegressor).
Trainingsschritte definiert durch num_epochs: stepsnicht explizit definiert
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)
Kommentar: Ich habe num_epochs=1für die Trainingseingabe festgelegt, und der Dokumenteintrag für numpy_input_fnsagt mir "num_epochs: Integer, Anzahl der Epochen, die über Daten iteriert werden sollen. Wenn Nonefür immer ausgeführt wird." . Mit num_epochs=1im obigen Beispiel läuft das Training genau x_train.size / batch_size times / step (in meinem Fall waren dies 175000 Schritte x_trainmit einer Größe von 700000 und batch_size4).
Trainingsschritte definiert durch num_epochs: stepsexplizit definiert höher als die Anzahl der Schritte, die implizit definiert sind durchnum_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)
Kommentar: num_epochs=1In meinem Fall würde dies 175000 Schritte bedeuten ( x_train.size / batch_size mit x_train.size = 700.000 und batch_size = 4 ), und dies ist genau die Anzahl der Schritte, estimator.trainobwohl der Schrittparameter auf 200.000 festgelegt wurde estimator.train(input_fn=train_input, steps=200000).
Trainingsschritte definiert durch 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)
Kommentar: Obwohl ich num_epochs=1beim Aufrufen eingestellt habe , numpy_input_fnstoppt das Training nach 1000 Schritten. Dies liegt daran, dass steps=1000in estimator.train(input_fn=train_input, steps=1000)das num_epochs=1in überschreibt tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True).
Schlussfolgerung : Unabhängig von den Parametern num_epochsfür tf.estimator.inputs.numpy_input_fnund stepsfür die estimator.trainDefinition bestimmt die Untergrenze die Anzahl der Schritte, die durchlaufen werden.