Tensorflow何时更新权重和偏差?

时间:2017-02-24 11:26:24

标签: python tensorflow

tensorflow何时更新for循环中的权重和偏差?

以下是来自tf&#39的github的代码。 mnist_softmax.py

for _ in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
  1. tensorflow何时更新权重和偏差?
  2. 运行sess.run()时是否会更新它们?如果是这样,在这个程序中,是否意味着更新权重和偏差1000次?
  3. 或者在完成整个for循环后更新它们吗?
  4. 如果2.是正确的,我的下一个问题是,每次都使用不同的训练数据来更新模型(因为它使用了next_batch(100)。总共有1000 * 100个训练数据点。但是所有数据点都是单独考虑一次。我是纠正还是我误解了什么?
  5. 如果3.是正确的,那么在经过一次更新步骤后,模型是否经过培训是否很奇怪? 我想我一定是在误解某些东西,如果有人能给我一些暗示或提供一些材料,真的会很棒。

1 个答案:

答案 0 :(得分:6)

  1. 每次运行train_step时都会更新权重。
  2. 是的,它正在此程序中更新权重1000次。
  3. 见上文
  4. 是的,你是对的,它会一次加载一个包含100个点的小批量,并用它来计算渐变。
  5. 这根本不奇怪。您不一定需要反复查看相同的数据,所需要的只是您有足够的数据供网络收敛。如果需要,您可以在相同的数据上多次迭代,但由于此模型没有很多参数,因此会收敛到一个时期。
  6. Tensorflow通过创建计算网络输出所需的计算图来工作。每个基本操作,如矩阵乘法,加法,你能想到的任何东西都是这个计算图中的节点。在您关注的tensorflow mnist示例中,40-46的行定义了网络体系结构

    • x:占位符
    • y_:占位符
    • W:变量 - 这是在培训期间学到的
    • b:变量 - 这也是在培训期间学习的

    网络代表一个简单的线性回归模型,使用y = W*x + b进行预测(见第43行)。

    接下来,您将配置网络的培训过程。该代码使用交叉熵作为最小化的损失函数(见第57行)。最小化是使用梯度下降算法完成的(见第59行)。

    此时,您的网络已完全构建。现在,您需要运行这些节点,以便执行实际计算(直到此时才执行计算)。

    在执行sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})的循环中,tf计算train_step的值,这会导致GradientDescentOptimizer尝试最小化cross_entropy,这就是训练进展的方式。