2017-02-24 76 views
3

张量流何时更新for循环中的权重和偏差?Tensorflow何时更新权重和偏差?

下面是tf的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. 还是在完成整个循环后更新它们?
  4. 如果2.是正确的,我的下一个问题是,是否每次都使用不同的训练数据更新模型(因为它使用next_batch(100)。总共有1000 * 100个训练数据点,但所有数据点都是
  5. 如果3.是正确的,奇怪的是经过一个更新步骤后模型已经被训练了吗?我认为我一定是误解了一些东西,它会是错误的。真正伟大的,如果任何人都可以给我一个提示或参考一些材料。

回答

2
  1. ,每天运行时间权重更新。
  2. 是的,它在这个程序中更新权重1000次。
  3. 查看上面
  4. 是的,你是对的,它一次加载一个包含100个点的小批量,并用它来计算梯度。
  5. 见上文

Tensorflow通过创建所必需的计算网络的输出的计算的曲线图。像矩阵乘法,加法等任何基本操作都可以被认为是这个计算图中的节点。在您遵循tensorflow MNIST例如,40-46行定义了网络架构

  • X:占位符
  • Y_:占位
  • 宽:变量 - 这是训练期间学习
  • 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最小化价值,这是训练的进行状况。

+0

为什么不需要一遍又一遍地训练相同的数据集?有超过1000 * 100的数据,我认为它需要一遍又一遍迭代整个数据集,直到达到最小值。我对么? –

+0

@ZianLai你不一定需要一次又一次地看到相同的数据,所需要的只是你有足够的数据让网络收敛。如果你愿意,你可以在相同的数据上迭代多次,但由于这个模型没有很多参数,它收敛在一个时期。 –

相关问题