Tensorflow MNIST(权重和偏置变量)

我在学习使用Tensorflow进行MNIST教程,但在教程的一个点上卡住了。

以下是提供的代码:

from tensorflow.examples.tutorials.mnist import input_dataimport tensorflow as tfmnist = input_data.read_data_sets("MNIST_data/", one_hot=True)x = tf.placeholder(tf.float32, [None, 784])W = tf.Variable(tf.zeros([784, 10]))b = tf.Variable(tf.zeros([10]))y = tf.nn.softmax(tf.matmul(x, W) + b)y_ = tf.placeholder(tf.float32, [None, 10])cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)saver = tf.train.Saver()init = tf.initialize_all_variables()sess = tf.Session()sess.run(init)for i in range(1000):  batch_xs, batch_ys = mnist.train.next_batch(100)  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

但我完全不明白在计算过程中,变量“W”(权重)和“b”(偏置)是如何变化的?在每个批次中,它们都被初始化为零,但之后呢?我完全看不出代码中它们将如何变化?

非常感谢您的帮助!


回答:

TensorFlow的变量在一次run()调用到下一次调用之间保持其状态。在你的程序中,它们将被初始化为零,然后在训练循环中逐步更新。

更改变量值的代码是由以下这行隐式创建的:

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

在TensorFlow中,tf.train.Optimizer是一个创建用于更新变量的操作的类,通常基于某个张量(例如损失)相对于这些变量的梯度。默认情况下,当你调用Optimizer.minimize()时,TensorFlow会创建操作来更新给定张量(在本例中为cross_entropy)所依赖的所有变量

当你调用sess.run(train_step)时,这将运行一个包括这些更新操作的图,因此指示TensorFlow更新变量的值。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注