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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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