关于tensorflow入门教程的问题

Questions about tensorflow GetStarted tutorial

所以我在阅读 tensorflow getstarted tutorial 时发现很难理解。关于每个函数以及为什么它们是必需的(或不需要),缺少很多解释。

  1. 在tf.estimator部分,“x_eval”和“y_eval”数组? x_trainy_train 数组给出了所需的输出(即相应的 y 坐标)对于给定的 x 坐标。但是 x_evaly_eval 值不正确:对于 x=5],y 应该是 -4,而不是 -4.1。这些价值观从何而来? x_evaly_eval 是什么意思?他们有必要吗?他们是如何选择这些值的?

  2. input_fn”("fn"到底是什么意思?)和“train_”的区别input_fn”。我看到唯一的区别是有

num_epochs=None, shuffle=True num_epochs=1000, shuffle=False

但我不明白"input_fn"或"train_input_fn"are/do是什么,或者两者有什么区别,或者是否两者都是必要的。

3.In

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

一段代码,没看懂"steps"和"num_epochs"的区别。每一个的含义是什么?你也可以 num_epochs=1000steps=1000 吗?

  1. 最后一个问题是,我如何获得W和b?在以前的方法中(不使用 tf.estimator),他们明确地发现 W=-1 和 b=1。如果我正在做一个更复杂的神经网络,涉及偏差和权重,我想我会想要恢复权重和偏差的实际值。这就是我使用 tensorflow 来寻找权重的全部意义所在!那么如何在 tf.estimator 示例中恢复它们?

这些只是在阅读 "getStarted" 教程时困扰我的一些问题。我个人认为它还有很多不足之处,因为每件事的作用都非常不清楚,你最多只能猜测。

我同意你的看法,tf.estimator 在本 "getting started" 教程中没有很好地介绍。我还认为一些机器学习背景有助于理解教程中发生的事情。


关于您问题的答案:

  1. 在机器学习中,我们通常会最小化模型在训练集上的损失,然后我们评估模型在评估集。这是因为很容易过拟合训练集并在其上获得 100% 的准确率,因此使用单独的验证集使得无法通过这种方式作弊

    • 这里(x_train, y_train)对应训练集,这里取全局最小值W=-1, b=1
    • 验证集 (x_eval, y_eval) 不必完全遵循训练集的分布。虽然我们可以在训练集上得到 0 的损失,但我们在验证集上得到了一个小的损失,因为我们没有恰好 y_eval = - x_eval + 1
  2. input_fn表示"input function"。这是为了表明对象 input_fn 是一个函数。
    tf.estimator 中,如果要训练估计器 (estimator.train()) 或对其进行评估 (estimator.evaluate()),则需要提供输入函数。

    • 通常你想要不同的转换来训练或评估,所以你有两个函数train_input_fneval_input_fn(教程中的input_fn几乎等同于train_input_fn只是令人困惑)。
    • 例如,在训练期间我们想要训练多个时期(即在数据集上多次)。对于评估,我们只需要一次通过验证数据来计算我们需要的指标
  3. epochs 的数量是我们重复整个数据集的次数。例如,如果我们训练 10 个时期,模型将看到每个输入 10 次。
    当我们训练机器学习模型时,我们通常使用小批量数据。例如,如果我们有 1,000 张图像,我们可以对每批 100 张图像进行训练。因此,训练 10 个 epoch 意味着训练 100 批数据。

  4. 估计器训练完成后,您可以通过estimator.get_variable_names() and the value of a variable through estimator.get_variable_value()访问变量列表。
    通常我们永远不需要这样做,因为我们可以使用训练有素的估计器来预测新的例子,使用 estimator.predict().


如果您觉得入门令人困惑,您可以随时提交 GitHub 问题来告诉 TensorFlow 团队并解释您的观点。