TensorFlow中的步骤和时期有什么区别?

Yan*_*ang 106 machine-learning tensorflow

在大多数模型中,有一个步骤参数指示在数据上运行的步骤数.但是我在大多数实际用法中看到,我们也执行拟合函数N个时期.

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

cha*_*255 78

时期通常意味着对所有训练数据进行一次迭代.例如,如果您有20,000张图像且批量大小为100,那么该纪元应包含20,000/100 = 200步.然而,我通常只设置固定数量的步骤,如每个时期1000,即使我有一个更大的数据集.在时代结束时,我检查平均成本,如果它改进了,我保存了一个检查点.从一个时期到另一个时期的步骤之间没有区别.我只是将它们视为检查站.

人们经常在时代之间的数据集中徘徊.我更喜欢使用random.sample函数来选择要在我的纪元中处理的数据.所以说我想做1000步,批量大小为32.我将从训练数据库中随机选取32,000个样本.

  • 在我看来,你答案的第二部分是错误的.时期被定义为通过训练数据的一个循环.如果你确定步数,它不是一个时代.类似地,如果您在每个步骤中独立地对训练示例进行采样,则不能将其称为纪元.您可以保存检查点并每N步执行一次检查,但这并不意味着N个步骤成为一个时代.我会避免在代码中称这个时代,它有可能混淆. (36认同)

Mar*_*ind 67

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

一个时期包括一个完整的循环通过训练数据.这通常是很多步骤.例如,如果您有2,000张图像并使用10的批量大小,则一个时期由2,000张图像/(10张图像/步骤)= 200步骤组成.

如果您在每个步骤中随机(和独立)选择我们的训练图像,通常不会将其称为纪元.[这是我的答案与前一个不同的地方.另见我的评论.]


小智 14

由于我目前正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

评论:我已经设置num_epochs=1了训练输入和doc条目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)
Run Code Online (Sandbox Code Playgroud)

注释:num_epochs=1在我的情况下,意味着175000步(x_train.size/batch_size,x_train.size = 700,000,batch_size = 4),这正是步数estimator.train虽然步参数设置为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)
Run Code Online (Sandbox Code Playgroud)

评论:虽然我已经设置了在1000步后num_epochs=1调用numpy_input_fn训练停止.这是因为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_epochsfor tf.estimator.inputs.numpy_input_fnstepsfor estimator.train)定义下限,都决定了将要运行的步骤数.


Xin*_* Su 12

Epoch:一个训练 epoch 代表完全使用所有训练数据进行梯度计算和优化(训练模型)。

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

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

训练步骤总数:number_of_epochsx Number of training steps per epoch


Muh*_*nat 9

In easy words
Epoch: Epoch is considered as number of one pass from entire dataset
Steps: In tensorflow one steps is considered as number of epochs multiplied by examples divided by batch size

steps = (epoch * examples)/batch size
For instance
epoch = 100, examples = 1000 and batch_size = 1000
steps = 100
Run Code Online (Sandbox Code Playgroud)


Div*_*ivi 5

根据Google 的机器学习术语表,纪元定义为

对整个数据集进行完整的训练,使得每个示例都被看到一次。因此,一个时期代表N/batch_size训练迭代,其中 N 是示例的总数。

如果您正在训练模型10 个时期,批量大小为6 ,给定总共12 个样本,这意味着:

  1. 该模型将能够在 2 次迭代(12 / 6 = 2)即单个时期内看到整个数据集。

  2. 总体而言,模型将进行 2 X 10 = 20 次迭代(每个时期的迭代次数 X 时期数)

  3. 每次迭代后都会重新评估损失和模型参数!