Dato che sto attualmente sperimentando con l'API tf.estimator, vorrei aggiungere anche i miei risultati. Non so ancora se l'utilizzo dei parametri dei passaggi e delle epoche è coerente in tutto TensorFlow e quindi per ora mi sto riferendo solo a tf.estimator (in particolare tf.estimator.LinearRegressor).
Fasi formative definite da num_epochs: stepsnon esplicitamente definite
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)
Commento: ho impostato num_epochs=1l'input di addestramento e la voce del documento per numpy_input_fnmi dice "num_epochs: Integer, numero di epoche su cui eseguire l'iterazione sui dati. If Noneverrà eseguito per sempre." . Con num_epochs=1nell'esempio di cui sopra la formazione corre esattamente x_train.size / batch_size volte / passi (nel mio caso questo è stato 175000 passi come x_trainaveva una dimensione di 700.000 e batch_sizeera 4).
Fasi di addestramento definite da num_epochs: stepsdefinite esplicitamente superiori al numero di fasi definite implicitamente danum_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)
Commento: num_epochs=1nel mio caso significherebbe 175000 passaggi ( x_train.size / batch_size con x_train.size = 700.000 e batch_size = 4 ) e questo è esattamente il numero di passaggi estimator.trainanche se il parametro steps è stato impostato su 200.000 estimator.train(input_fn=train_input, steps=200000).
Fasi di formazione definite da 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)
Commento: anche se ho impostato num_epochs=1quando si chiama, numpy_input_fnl'allenamento si interrompe dopo 1000 passaggi. Questo perché steps=1000in estimator.train(input_fn=train_input, steps=1000)sovrascrive il file num_epochs=1in tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True).
Conclusione : qualunque siano i parametri num_epochsper tf.estimator.inputs.numpy_input_fne stepsper estimator.traindefinire, il limite inferiore determina il numero di passaggi che verranno eseguiti.