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
: steps
nicht 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=1
für die Trainingseingabe festgelegt, und der Dokumenteintrag für numpy_input_fn
sagt mir "num_epochs: Integer, Anzahl der Epochen, die über Daten iteriert werden sollen. Wenn None
für immer ausgeführt wird." . Mit num_epochs=1
im obigen Beispiel läuft das Training genau x_train.size / batch_size times / step (in meinem Fall waren dies 175000 Schritte x_train
mit einer Größe von 700000 und batch_size
4).
Trainingsschritte definiert durch num_epochs
: steps
explizit 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=1
In 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.train
obwohl 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=1
beim Aufrufen eingestellt habe , numpy_input_fn
stoppt das Training nach 1000 Schritten. Dies liegt daran, dass steps=1000
in estimator.train(input_fn=train_input, steps=1000)
das num_epochs=1
in ü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_epochs
für tf.estimator.inputs.numpy_input_fn
und steps
für die estimator.train
Definition bestimmt die Untergrenze die Anzahl der Schritte, die durchlaufen werden.