TensorFlow何时更新权重和偏见



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

以下是TF GitHub的代码。mnistrongoftmax.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()时会更新它们吗?如果是这样,这是否意味着在此程序中,TF更新权重和偏见1000次?
  3. 或完成整体循环后更新它们?
  4. 如果2.只被单独考虑一次。我是正确的还是我误解了某些东西?
  5. 如果3.是正确的,很奇怪,仅在一个更新步骤之后,该模型就已接受了培训?我想我一定会误解一些东西,如果有人能给我提示或推荐一些材料,那真的很棒。
  1. 每次运行train_step时,它都会更新权重。
  2. 是的,它正在更新此程序中的权重1000次。
  3. 请参见上文
  4. 是的,您是正确的,它一次加载一个装有100点的迷你批次,并使用它来计算梯度。
  5. 一点都不奇怪。您不一定需要一次又一次地查看相同的数据,所需的只是您有足够的数据来使网络收敛。如果需要,您可以在相同的数据上多次迭代,但是由于此模型没有很多参数,因此它会在一个时代收敛。

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,这就是培训的进展。

最新更新