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