由于我目前正在试验 tf.estimator API,我也想在这里添加我的发现。我还不知道整个 TensorFlow 中 step 和 epochs 参数的使用是否一致,因此我现在只与 tf.estimator(特别是 tf.estimator.LinearRegressor)有关。
num_epochs 定义的训练步骤: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)
评论:我为训练输入设置了num_epochs=1,numpy_input_fn 的文档条目告诉我“num_epochs:整数,迭代数据的时期数。如果None 将永远运行。” 。在上面的例子中,num_epochs=1 训练运行精确 x_train.size/batch_size 次/步(在我的例子中,这是 175000 步,因为 x_train 的大小为 700000,batch_size 为 4 )。
num_epochs 定义的训练步数:steps 显式定义的步数高于num_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)
评论:num_epochs=1 在我的情况下意味着 175000 步(x_train.size/batch_size x_train.size=700,000 和 batch_size=4 em>) 这正是步数estimator.train,尽管steps 参数设置为200,000 estimator.train(input_fn=train_input, steps=200000)。
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)
评论:虽然我在调用numpy_input_fn时设置了num_epochs=1,但训练在1000步后停止。这是因为estimator.train(input_fn=train_input, steps=1000) 中的steps=1000 覆盖了tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True) 中的num_epochs=1。
结论:
无论num_epochs 用于tf.estimator.inputs.numpy_input_fn 和steps 用于estimator.train 定义的参数是什么,下限都决定了将运行的步数。