TensorFlow中的步骤和纪元有什么区别?
machine-learning
tensorflow
5
0

在大多数模型中,都有一个steps参数,指示要运行数据的步骤数 。但是我仍然看到,在最实际的用法中,我们还执行了拟合函数N epochs

以1个时间段运行1000个步和以10个时间段运行100个步有什么区别?在实践中哪一个更好?连续纪元之间有逻辑变化吗?数据改组?

参考资料:
Stack Overflow
收藏
评论
共 5 个回答
高赞 时间 活跃

历元通常意味着对所有训练数据进行一次迭代。例如,如果您有20,000张图像且批处理大小为100,则纪元应包含20,000 / 100 = 200步。但是,即使我拥有更大的数据集,我通常也只设置固定的步骤数(例如每个时期1000)。在阶段结束时,我检查平均费用,如果费用有所改善,则保存一个检查点。从一个纪元到另一个纪元的步骤之间没有区别。我只是把它们当作检查站。

人们经常在各个时期之间乱转数据集。我更喜欢使用random.sample函数来选择要在我的时代处理的数据。假设我想以32个批次的大小执行1000步。我将从训练数据池中随机抽取32,000个样本。

收藏
评论

用简单的话
纪元:纪元被视为整个数据集中的一次通过次数
步骤:在tensorflow中,一步被视为时期数乘以示例除以批次大小

steps = (epoch * examples)/batch size
For instance
epoch = 100, examples = 1000 and batch_size = 1000
steps = 100
收藏
评论

训练步骤是一个梯度更新。在一个步骤batch_size中处理了许多示例。

一个时期包括整个训练数据的整个周期。这通常是很多步骤。例如,如果您有2,000张图像,并且批处理大小为10,则一个时代包括2,000张图像/(10张图像/步)= 200步。

如果您在每个步骤中随机(且独立)选择我们的训练图像,通常就不称其为时代。 [这是我的答案与上一个答案不同的地方。另请参阅我的评论。]

收藏
评论

纪元:一个训练纪元代表了所有训练数据的完整使用,用于梯度计算和优化(训练模型)。

步骤:训练步骤是指使用一批数据的训练数据来训练模型。

每个时期的训练步骤数:total_number_of_training_examples个/ batch_size。

训练步骤总数:时期数x每个时期的训练步骤数。

收藏
评论

当我目前正在尝试使用tf.estimator API时,我也想在此添加露水发现。我还不知道在整个TensorFlow中步骤和纪元参数的用法是否一致,因此,我现在仅与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的doc条目告诉我“ num_epochs:整数,要遍历数据的时期数。如果None则将永远运行。” 。在上面的示例中, num_epochs=1 ,训练正好运行x_train.size / batch_size次/步(在我的情况下,这是175000个步,因为x_train的大小为700000, batch_size为4)。

培养通过限定的步骤num_epochssteps比由隐式定义的步骤数显式定义的更高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_sizex_train.size = 700,000batch_size = 4 ),这恰好是estimator.train的步数,尽管将steps参数设置为200,000 estimator.train(input_fn=train_input, steps=200000)

steps定义的培训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个步骤后停止。这是因为steps=1000estimator.train(input_fn=train_input, steps=1000)覆盖num_epochs=1tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)

结论 :无论参数num_epochstf.estimator.inputs.numpy_input_fnstepsestimator.train限定,下限确定的,这将通过运行步骤的数目。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号