关于tensorflow入门教程的问题
Questions about tensorflow GetStarted tutorial
所以我在阅读 tensorflow getstarted tutorial 时发现很难理解。关于每个函数以及为什么它们是必需的(或不需要),缺少很多解释。
在tf.estimator部分,“x_eval”和“y_eval”数组? x_train 和 y_train 数组给出了所需的输出(即相应的 y 坐标)对于给定的 x 坐标。但是 x_eval 和 y_eval 值不正确:对于 x=5],y 应该是 -4,而不是 -4.1。这些价值观从何而来? x_eval 和 y_eval 是什么意思?他们有必要吗?他们是如何选择这些值的?
“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=1000 和 steps=1000 吗?
- 最后一个问题是,我如何获得W和b?在以前的方法中(不使用 tf.estimator),他们明确地发现 W=-1 和 b=1。如果我正在做一个更复杂的神经网络,涉及偏差和权重,我想我会想要恢复权重和偏差的实际值。这就是我使用 tensorflow 来寻找权重的全部意义所在!那么如何在 tf.estimator 示例中恢复它们?
这些只是在阅读 "getStarted" 教程时困扰我的一些问题。我个人认为它还有很多不足之处,因为每件事的作用都非常不清楚,你最多只能猜测。
我同意你的看法,tf.estimator
在本 "getting started" 教程中没有很好地介绍。我还认为一些机器学习背景有助于理解教程中发生的事情。
关于您问题的答案:
在机器学习中,我们通常会最小化模型在训练集上的损失,然后我们评估模型在评估集。这是因为很容易过拟合训练集并在其上获得 100% 的准确率,因此使用单独的验证集使得无法通过这种方式作弊。
- 这里
(x_train, y_train)
对应训练集,这里取全局最小值W=-1, b=1
。
- 验证集
(x_eval, y_eval)
不必完全遵循训练集的分布。虽然我们可以在训练集上得到 0
的损失,但我们在验证集上得到了一个小的损失,因为我们没有恰好 y_eval = - x_eval + 1
input_fn
表示"input function"。这是为了表明对象 input_fn
是一个函数。
在 tf.estimator
中,如果要训练估计器 (estimator.train()
) 或对其进行评估 (estimator.evaluate()
),则需要提供输入函数。
- 通常你想要不同的转换来训练或评估,所以你有两个函数
train_input_fn
和eval_input_fn
(教程中的input_fn
几乎等同于train_input_fn
只是令人困惑)。
- 例如,在训练期间我们想要训练多个时期(即在数据集上多次)。对于评估,我们只需要一次通过验证数据来计算我们需要的指标
epochs 的数量是我们重复整个数据集的次数。例如,如果我们训练 10 个时期,模型将看到每个输入 10 次。
当我们训练机器学习模型时,我们通常使用小批量数据。例如,如果我们有 1,000 张图像,我们可以对每批 100 张图像进行训练。因此,训练 10 个 epoch 意味着训练 100 批数据。
估计器训练完成后,您可以通过estimator.get_variable_names()
and the value of a variable through estimator.get_variable_value()
访问变量列表。
通常我们永远不需要这样做,因为我们可以使用训练有素的估计器来预测新的例子,使用 estimator.predict()
.
如果您觉得入门令人困惑,您可以随时提交 GitHub 问题来告诉 TensorFlow 团队并解释您的观点。
所以我在阅读 tensorflow getstarted tutorial 时发现很难理解。关于每个函数以及为什么它们是必需的(或不需要),缺少很多解释。
在tf.estimator部分,“x_eval”和“y_eval”数组? x_train 和 y_train 数组给出了所需的输出(即相应的 y 坐标)对于给定的 x 坐标。但是 x_eval 和 y_eval 值不正确:对于 x=5],y 应该是 -4,而不是 -4.1。这些价值观从何而来? x_eval 和 y_eval 是什么意思?他们有必要吗?他们是如何选择这些值的?
“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=1000 和 steps=1000 吗?
- 最后一个问题是,我如何获得W和b?在以前的方法中(不使用 tf.estimator),他们明确地发现 W=-1 和 b=1。如果我正在做一个更复杂的神经网络,涉及偏差和权重,我想我会想要恢复权重和偏差的实际值。这就是我使用 tensorflow 来寻找权重的全部意义所在!那么如何在 tf.estimator 示例中恢复它们?
这些只是在阅读 "getStarted" 教程时困扰我的一些问题。我个人认为它还有很多不足之处,因为每件事的作用都非常不清楚,你最多只能猜测。
我同意你的看法,tf.estimator
在本 "getting started" 教程中没有很好地介绍。我还认为一些机器学习背景有助于理解教程中发生的事情。
关于您问题的答案:
在机器学习中,我们通常会最小化模型在训练集上的损失,然后我们评估模型在评估集。这是因为很容易过拟合训练集并在其上获得 100% 的准确率,因此使用单独的验证集使得无法通过这种方式作弊。
- 这里
(x_train, y_train)
对应训练集,这里取全局最小值W=-1, b=1
。 - 验证集
(x_eval, y_eval)
不必完全遵循训练集的分布。虽然我们可以在训练集上得到0
的损失,但我们在验证集上得到了一个小的损失,因为我们没有恰好y_eval = - x_eval + 1
- 这里
input_fn
表示"input function"。这是为了表明对象input_fn
是一个函数。
在tf.estimator
中,如果要训练估计器 (estimator.train()
) 或对其进行评估 (estimator.evaluate()
),则需要提供输入函数。- 通常你想要不同的转换来训练或评估,所以你有两个函数
train_input_fn
和eval_input_fn
(教程中的input_fn
几乎等同于train_input_fn
只是令人困惑)。 - 例如,在训练期间我们想要训练多个时期(即在数据集上多次)。对于评估,我们只需要一次通过验证数据来计算我们需要的指标
- 通常你想要不同的转换来训练或评估,所以你有两个函数
epochs 的数量是我们重复整个数据集的次数。例如,如果我们训练 10 个时期,模型将看到每个输入 10 次。
当我们训练机器学习模型时,我们通常使用小批量数据。例如,如果我们有 1,000 张图像,我们可以对每批 100 张图像进行训练。因此,训练 10 个 epoch 意味着训练 100 批数据。估计器训练完成后,您可以通过
estimator.get_variable_names()
and the value of a variable throughestimator.get_variable_value()
访问变量列表。
通常我们永远不需要这样做,因为我们可以使用训练有素的估计器来预测新的例子,使用estimator.predict()
.
如果您觉得入门令人困惑,您可以随时提交 GitHub 问题来告诉 TensorFlow 团队并解释您的观点。