该答案基于我对入门教程代码所做的实验。
Mad Wombat对num_epochs , batch_size和steps术语进行了详细说明。这个答案是对他答案的扩展。
num_epochs-程序可以在一train()
迭代整个数据集的最大次数。使用此参数,我们可以限制在执行一个train()
方法期间可以处理的批处理数量。
batch_size - input_fn发出的单个批次中的示例数
步骤 LinearRegressor.train()
方法可在一次执行中处理的批次数量
max_steps是LinearRegressor.train()
方法的另一个参数。此参数定义了LinearRegressor()
对象生命周期中可以处理的最大步数(批次)。
我们这意味着什么。以下实验更改了教程提供的两行代码。其余代码保持不变。
注意:对于所有示例,假定训练次数,即x_train的长度等于4。
例1:
input_fn = tf.estimator.inputs.numpy_input_fn(
{"x": x_train}, y_train, batch_size=4, num_epochs=2, shuffle=True)
estimator.train(input_fn=input_fn, steps=10)
在此示例中,我们定义了batch_size = 4和num_epochs =2。因此,对于一次train()
执行, input_fn
只能发出2批输入数据。即使我们定义的步数 = 10, train()
方法也会在2个步骤后停止。
现在,再次执行estimator.train(input_fn=input_fn, steps=10)
。我们可以看到还执行了2个步骤。我们可以一次又一次地继续执行train()
方法。如果我们执行train()
50次,则总共执行了100个步骤。
例2:
input_fn = tf.estimator.inputs.numpy_input_fn(
{"x": x_train}, y_train, batch_size=2, num_epochs=2, shuffle=True)
estimator.train(input_fn=input_fn, steps=10)
在此示例中, batch_size的值更改为2(在示例1中等于4)。现在,在每次执行train()
方法时,将处理4个步骤。第四步之后,没有要继续运行的批处理。如果再次执行train()
方法,则将处理另外4个步骤,使其总共达到8个步骤。
在这里, 步骤的值无关紧要,因为train()
方法最多可以获取4个批次。如果steps的值小于( num_epochs x training_size )/ batch_size ,请参阅示例 3。
例3:
input_fn = tf.estimator.inputs.numpy_input_fn(
{"x": x_train}, y_train, batch_size=2, num_epochs=8, shuffle=True)
estimator.train(input_fn=input_fn, steps=10)
现在,让batch_size = 2, num_epochs = 8, 步数 = input_fn
可以在一次train()
方法中总共发出16个批处理。但是,将step设置为10。这意味着,即使input_fn
可以提供16个批处理来执行, train()
必须在10个步骤之后停止。当然,可以重新执行train()
方法以累积更多步骤。
从示例1、2和3中,我们可以清楚地看到step , num_epoch和batch_size的值如何影响一次可以由train()
方法执行的步骤数。
的参数MAX_STEPS train()
方法的限制,可以通过累积运行步骤的总数train()
例4:
如果batch_size = 4, num_epochs = 2,则input_fn
可以发出2个批处理以执行一次train()
。但是,如果将max_steps
设置为20,那么无论执行多少次train()
,优化中都将只运行20个步骤。这与示例1相反,在示例1中,如果将train()
方法提取100次,则优化器可以运行200步。
希望这能对这些论点的含义有一个详细的了解。
0
我正在阅读TensorFlow 入门教程 。在
tf.contrib.learn
示例中,这些是两行代码:我想知道是什么参数的区别
steps
中调用fit
功能和num_epochs
在numpy_input_fn
通话。不应该只有一个论点吗?它们如何连接?我发现该代码以某种方式将这两者中的
min
作为本教程玩具示例中的步骤数。至少
num_epochs
或steps
这两个参数之一必须是冗余的。我们可以彼此计算。有没有办法知道我的算法实际执行了多少步骤(参数更新的次数)?我很好奇哪个优先。并取决于其他一些参数吗?