2017-05-08 49 views
2
features = [tf.contrib.layers.real_valued_column("x", dimension=1)] 
estimator = tf.contrib.learn.LinearRegressor(feature_columns=features) 
y = np.array([0., -1., -2., -3.]) 
input_fn = tf.contrib.learn.io.numpy_input_fn({"x":x}, y, batch_size=4, 
               num_epochs=1000) 

estimator.fit(input_fn=input_fn, steps=1000) 

例如,做这些 “步骤= 1000” 和 “num_epochs = 1000” 的意思是完全一样的东西?如果是,为什么需要重复?如果没有,我可以设置这两个参数不同吗?时代和训练步骤是否一样?

回答

1

这里是任何机器学习算法或框架划时代和步骤之间的基本区别:

一旦框架经过设置,以更新其参数,它被称为一个时代在训练中的所有数据点。步骤是参数的一次更新(例如,如果训练DNN,神经网络的权重)。此更新可以使用单个数据点或一小批数据点(例如随机抽取100个数据点,有或没有替换)或所有点获得。因此,您可以看到是否所有数据点在一个步骤中使用(或参数更新),它将成为一个时间点,即一个步骤=一个时间点。

通常框架使用微型配料和在一个步骤中它们批次100(或某个其他数目)的数据点一起,做一个更新。在这种情况下,如果说你有100万个数据点(10^6),那么一个时间点有10000步,因为一个步骤包含100个数据点。

+0

顺便说一句,在我的例子中,我可以更改步骤从“500”到“1000”?我的理解不是,因为所有数据点由于批量大小=“4”而在一个步骤中使用。如果是这种情况,为什么我应该指定“steps”参数?它不应该总是通过“(数据点数/批量大小)*时代”自动计算吗? – user697911

2

不,他们是不一样的。与大多数(全部?)框架,Tensorflow有指定时期一些命令,以及一些在工作步骤,a.k.a 迭代。 A 步骤是一个批次,其由模型的输入中指定的批量大小管理。例如,如果您使用的默认批次大小为256的AlexNet和ILSVRC 2012数据集大约128万个图像,那么每个时期(1,280,000/256)大约有5000个步骤。

批量大小是并行处理图像的数量。如果数据集中有1.28M图像,则必须处理每个时期12.8M的图像:这就是时期的定义 - 处理每个输入一次。算术清楚了吗?

+1

通过“每个纪元5000步”,你的意思是批量大小256等于时代的数量?请澄清更多。 – user697911

相关问题