TensorFlow ``tf.placeholder`` 与 ``tf.Variable`` 核心区别详解


发布日期 : 2020-08-20 00:06:56 UTC

访问量: 10 次浏览

tf.placeholdertf.Variable 之间有什么区别

在这篇文章中,我们将看到 tf.placeholdertf.Variable 之间的区别。

tf.placeholder

顾名思义,它是一个空的地方。它是一个空的变量,后来训练数据被送入其中。tf.placeholder允许我们首先创建一个结构,即设置计算图,然后将数据输入其中。它允许我们在运行时放置数据。当会议开始时,我们把数据输入占位符。

语法:
tf.compat.v1.placeholder(dtype, shape=None, name=None)

  • dtype是输入的数据类型。
  • shape是张量的形状。然而,它是一个可选的参数。
  • name是操作名称

让我们借助于一个例子来阐述一下

# import packages
import tensorflow.compat.v1 as tf 

# disable eager mode
tf.compat.v1.disable_eager_execution()  

# create empty placeholder
a = tf.placeholder(tf.float32, name='a')  
b = tf.placeholder(tf.float32, name='b')  

# create third node and perform subtraction
c = tf.subtract(a, b, name='c')  
sess = tf.Session()

# run session
sess.run(c, feed_dict={a: 1, b: 8})  

输出:

-7.0

在上面的代码中,我们创建了两个占位符,并创建了第三个节点’c’来执行减法。最后,我们使用 session.run 来执行操作。

tf.Variable

tf.Variable 是一个持有初始值的状态。这些值不过是张量。变量可以通过调用构造函数被添加到计算图中。
每当一个变量被创建,它总是被初始化。在会话执行过程中,它们基本上持有权重和偏差。

语法:

tf.Variable(initial_value=None,
trainable=None,
validate_shape=True,
caching_device=None,
name=None,
variable_def=None,
dtype=None,
import_scope=None,
constraint=None,
synchronization=tf.VariableSynchronization.AUTO,
aggregation=tf.compat.v1.VariableAggregation.NONE,
shape=None)

让我们借助于一个例子来阐述一下

# import packages
import tensorflow as tf

# create variables
tensor1 = tf.Variable([3, 4])
tensor2 = tf.Variable([2, 3])

print(tensor1-tensor2)

输出:

Tensor("sub:0", shape=(2,), dtype=int32)

在上面的代码中,我们创建了两个张量变量,并用两个列表初始化它们。然后我们对两个张量进行减法并得到结果。

tf.placeholder和tf.Variable之间的区别

tf.placeholdertf.Variable
它是一个空变量,数据在代码的后面部分被输入。变量一旦声明,就必须在声明时用一个初始值进行初始化。
占位符被绑定在表达式内。变量用于保存权重和偏差的值。
这些值是特定的,在程序执行过程中不会改变。在程序执行过程中,数值会被改变。
它用于处理外部数据。它用于存储整个程序中需要的数值。