Ponieważ obecnie eksperymentuję z interfejsem API tf.estimator, chciałbym tutaj również dodać moje zroszone odkrycia. Nie wiem jeszcze, czy użycie parametrów kroków i epok jest spójne w całym TensorFlow i dlatego na razie odnoszę się tylko do tf.estimator (a konkretnie tf.estimator.LinearRegressor).
Etapy szkolenia zdefiniowane przez num_epochs
: steps
nie zostały wyraźnie określone
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)
Komentarz: Ustawiłemnum_epochs=1
dla danych wejściowych uczących i wpis w dokumencie numpy_input_fn
mówi mi „num_epochs: Integer, liczba epok do iteracji po danych. Jeśli None
będzie działać wiecznie”. . W num_epochs=1
powyższym przykładzie szkolenie przebiega dokładnie x_train.size / batch_size razy / kroki (w moim przypadku było to 175000 kroków, a x_train
miał rozmiar 700000 ibatch_size
było 4).
Kroki szkoleniowe zdefiniowane przez num_epochs
: steps
jawnie zdefiniowane powyżej liczby kroków domyślnie zdefiniowane przeznum_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)
Komentarz: num_epochs=1
w moim przypadku oznaczałoby to 175000 kroków ( x_train.size / batch_size z x_train.size = 700000 i batch_size = 4 ) i jest to dokładnie liczba kroków, estimator.train
chociaż parametr kroków został ustawiony na 200000 estimator.train(input_fn=train_input, steps=200000)
.
Etapy szkolenia zdefiniowane przez 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)
Komentarz: Chociaż ustawiłem num_epochs=1
przy wywoływaniu numpy_input_fn
trening zatrzymuje się po 1000 krokach. Dzieje się tak, ponieważ steps=1000
w estimator.train(input_fn=train_input, steps=1000)
nadpisuje num_epochs=1
in tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
.
Wniosek : Niezależnie od parametrów num_epochs
dla tf.estimator.inputs.numpy_input_fn
i steps
do estimator.train
zdefiniowania, dolna granica określa liczbę kroków, które zostaną wykonane.