张量流什么时候更新for循环中的权重和偏差?
下面是tf的github上的代码。mnist_softmax.py https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/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})
- 张量流什么时候更新权重和偏差?
- 运行时是否更新它们
sess.run()
?如果是这样,是否意味着在这个程序中,tf 更新权重和偏差 1000 次?
- 或者它会在完成整个 for 循环后更新它们吗?
- 如果2.是正确的,我的下一个问题是,tf是否每次都使用不同的训练数据更新模型(因为它使用next_batch(100)。总共有1000 * 100个训练数据点。但是所有数据点只考虑一次我是正确的还是我误解了什么?
- 如果 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
这就是训练的进展方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)