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
: steps
non 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=1
l'input di addestramento e la voce del documento per numpy_input_fn
mi dice "num_epochs: Integer, numero di epoche su cui eseguire l'iterazione sui dati. If None
verrà eseguito per sempre." . Con num_epochs=1
nell'esempio di cui sopra la formazione corre esattamente x_train.size / batch_size volte / passi (nel mio caso questo è stato 175000 passi come x_train
aveva una dimensione di 700.000 e batch_size
era 4).
Fasi di addestramento definite da num_epochs
: steps
definite 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=1
nel 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.train
anche 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=1
quando si chiama, numpy_input_fn
l'allenamento si interrompe dopo 1000 passaggi. Questo perché steps=1000
in estimator.train(input_fn=train_input, steps=1000)
sovrascrive il file num_epochs=1
in 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_epochs
per tf.estimator.inputs.numpy_input_fn
e steps
per estimator.train
definire, il limite inferiore determina il numero di passaggi che verranno eseguiti.