Como atualmente estou experimentando a API tf.estimator, também gostaria de adicionar minhas descobertas orvalhadas aqui. Ainda não sei se o uso de parâmetros de etapas e épocas é consistente em todo o TensorFlow e, portanto, estou apenas relacionado ao tf.estimator (especificamente tf.estimator.LinearRegressor) por enquanto.
Etapas de treinamento definidas por num_epochs
: steps
não definidas explicitamente
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)
Comentário: Eu configurei num_epochs=1
para a entrada de treinamento e a entrada de documento para numpy_input_fn
me diz "num_epochs: Inteiro, número de épocas para iterar nos dados. Se None
for executado para sempre". . No num_epochs=1
exemplo acima, o treinamento é executado exatamente x_train.size / batch_size times / steps (no meu caso, foram 175000 etapas, x_train
com um tamanho de 700000 e batch_size
4).
Etapas de treinamento definidas por num_epochs
: steps
explicitamente definidas maiores que o número de etapas definidas implicitamente pornum_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)
Comentário: num_epochs=1
no meu caso, significaria 175000 etapas ( x_train.size / batch_size com x_train.size = 700.000 e batch_size = 4 ) e esse é exatamente o número de etapas, estimator.train
embora o parâmetro steps tenha sido definido como 200.000 estimator.train(input_fn=train_input, steps=200000)
.
Etapas de treinamento definidas por 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)
Comentário: Embora eu tenha definido num_epochs=1
ao ligar, numpy_input_fn
o treinamento para após 1000 etapas. Isso ocorre porque steps=1000
no estimator.train(input_fn=train_input, steps=1000)
substitui o num_epochs=1
no tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
.
Conclusão : Quaisquer que sejam os parâmetros num_epochs
para tf.estimator.inputs.numpy_input_fn
e steps
para estimator.train
definir, o limite inferior determina o número de etapas que serão executadas.