我是TensorFlow的新手。我搞不懂tf的区别。占位符和tf.Variable。在我看来,tf。占位符用于输入数据,tf。变量用于存储数据的状态。这就是我所知道的一切。

谁能给我详细解释一下他们的不同之处吗?特别是,什么时候使用tf。变量和何时使用tf.placeholder?


当前回答

Tensorflow 2.0兼容答案:占位符的概念,tf。占位符在Tensorflow 2中不可用。x(>= 2.0),因为默认执行模式为“主动执行”。

但是,我们可以在图形模式下使用它们(禁用急切执行)。

版本2中TF占位符的等效命令。X是tf. compatat .v1.placeholder。

版本2中TF变量的等效命令。X等于tf。变量和如果您想从1迁移代码。X到2。X,等效命令为

tf.compat.v2.Variable。

有关Tensorflow 2.0版本的更多信息,请参阅此Tensorflow页面。

有关从版本1迁移的更多信息,请参阅迁移指南。X到2。X。

其他回答

简而言之,使用tf。变量为可训练变量,如权重(W)和偏差(B)为您的模型。

weights = tf.Variable(
    tf.truncated_normal([IMAGE_PIXELS, hidden1_units],
                    stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))), name='weights')

biases = tf.Variable(tf.zeros([hidden1_units]), name='biases')

特遣部队。占位符用于提供实际的训练示例。

images_placeholder = tf.placeholder(tf.float32, shape=(batch_size, IMAGE_PIXELS))
labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))

这是你在训练中输入训练示例的方式:

for step in xrange(FLAGS.max_steps):
    feed_dict = {
       images_placeholder: images_feed,
       labels_placeholder: labels_feed,
     }
    _, loss_value = sess.run([train_op, loss], feed_dict=feed_dict)

你的助教。变量将被训练(修改)作为这个训练的结果。

详见https://www.tensorflow.org/versions/r0.7/tutorials/mnist/tf/index.html。(例子摘自网页。)

占位符:

A placeholder is simply a variable that we will assign data to at a later date. It allows us to create our operations and build our computation graph, without needing the data. In TensorFlow terminology, we then feed data into the graph through these placeholders. Initial values are not required but can have default values with tf.placeholder_with_default) We have to provide value at runtime like : a = tf.placeholder(tf.int16) // initialize placeholder value b = tf.placeholder(tf.int16) // initialize placeholder value use it using session like : sess.run(add, feed_dict={a: 2, b: 3}) // this value we have to assign at runtime

变量:

TensorFlow变量是表示共享的最佳方式, 由程序操纵的持久状态。 变量是通过tf操作的。变量类。一个特遣部队。变量 表示一个张量,其值可以通过对其运行操作来改变。

例如:tf。变量("欢迎来到tensorflow!! ")

在TensorFlow中,变量只是另一个张量(比如tf。常量或tf.placeholder)。碰巧变量可以通过计算来修改。特遣部队。占位符用于将在运行时提供给计算的外部输入(例如训练数据)。特遣部队。变量用于作为计算的一部分并将被计算修改的输入(例如神经网络的权重)。

想象一个计算图。在这样的图中,我们需要一个输入节点来将数据传递到图中,这些节点应该在tensorflow中定义为占位符。

不要把Python想象成一个通用的程序。你可以写一个Python程序,做所有那些在其他答案中通过变量解释的事情,但对于张量流中的计算图,为了将数据输入到图中,你需要将这些点定义为占位符。

除了其他人的答案,他们在Tensoflow网站上的MNIST教程中也解释得很好:

We describe these interacting operations by manipulating symbolic variables. Let's create one: x = tf.placeholder(tf.float32, [None, 784]), x isn't a specific value. It's a placeholder, a value that we'll input when we ask TensorFlow to run a computation. We want to be able to input any number of MNIST images, each flattened into a 784-dimensional vector. We represent this as a 2-D tensor of floating-point numbers, with a shape [None, 784]. (Here None means that a dimension can be of any length.) We also need the weights and biases for our model. We could imagine treating these like additional inputs, but TensorFlow has an even better way to handle it: Variable. A Variable is a modifiable tensor that lives in TensorFlow's graph of interacting operations. It can be used and even modified by the computation. For machine learning applications, one generally has the model parameters be Variables. W = tf.Variable(tf.zeros([784, 10])) b = tf.Variable(tf.zeros([10])) We create these Variables by giving tf.Variable the initial value of the Variable: in this case, we initialize both W and b as tensors full of zeros. Since we are going to learn W and b, it doesn't matter very much what they initially are.