所以我正在阅读tensorflow getstarted tutorial,我发现很难遵循。关于每个功能以及为什么它们是必要的(或不是),有很多解释。
num_epochs=None, shuffle=True
num_epochs=1000, shuffle=False
但我不明白“input_fn”或“train_input_fn”是什么/做什么,或者两者之间有什么区别,或者两者都是必要的。
在
estimator.train(input_fn=input_fn, steps=1000)
一段代码,我不明白“steps”和“num_epochs”之间的区别。每个人的意义是什么?你有num_epochs = 1000和步数= 1000吗?
这些只是在阅读“getStarted”教程时遇到的一些问题。我个人认为它留下了很多欲望,因为很不清楚每件事情的作用,你最多可以猜测。
我同意你的看法,tf.estimator
在这个“入门”教程中没有很好地介绍。我还认为一些机器学习背景将有助于理解教程中发生的事情。
至于你的问题的答案:
(x_train, y_train)
对应于训练集,其中W=-1, b=1
获得全局最小值。
验证集(x_eval, y_eval)
不必完全遵循训练集的分布。虽然我们可以在训练集上丢失0
,但我们在验证集上获得了一点点损失,因为我们没有完全y_eval = - x_eval + 1
input_fn
的意思是“输入功能”。这是为了表明对象input_fn
是一个函数。
在tf.estimator
中,如果要训练估算器(estimator.train()
)或评估它(estimator.evaluate()
),则需要提供输入函数。
通常你需要不同的训练或评估转换,所以你有两个函数train_input_fn
和eval_input_fn
(教程中的input_fn
几乎相当于train_input_fn
,只是令人困惑)。
例如,在训练期间,我们想要训练多个时期(即,在数据集上多次)。对于评估,我们只需要对验证数据进行一次传递即可计算出我们需要的指标estimator.get_variable_names()
访问变量列表,通过estimator.get_variable_value()
访问变量值。
通常我们永远不需要这样做,因为我们可以使用经过训练的估算器来预测新的例子,使用estimator.predict()
。如果您觉得入门令人困惑,您可以随时提交GitHub问题,告诉TensorFlow团队并解释您的观点。