TensorFlow没有一流的Tensor对象,这意味着
Tensor在运行时执行的基础图中没有任何概念。相反,该图由相互连接的op节点组成,代表操作。操作分配内存的输出,这些都可以在端点上
:0,
:1等等,你可以认为这些端点作为的
Tensor。如果具有
tensor,则
nodename:0可以将其值提取为
sess.run(tensor)或
sess.run('nodename:0')。执行粒度发生在操作级别,因此该run方法将执行op,该op将计算所有端点,而不仅仅是
:0端点。可能有一个没有输出的Op节点(例如
tf.group),则没有张量与其关联。没有底层Op节点就不可能有张量。
您可以通过执行以下操作来检查基础图中发生了什么
tf.reset_default_graph()value = tf.constant(1)print(tf.get_default_graph().as_graph_def())
因此,
tf.constant有了一个操作节点,您可以使用
sess.run("Const:0")或获取它sess.run(value)
同样,
value=tf.placeholder(tf.int32)创建一个具有name的常规节点
Placeholder,您可以将其作为
feed_dict={"Placeholder:0":2}或馈入feed_dict={value:2}。您不能在同一session.run调用中提供和获取占位符,但是可以通过
tf.identity在顶部附加节点并获取该结果来查看结果。
对于变量
tf.reset_default_graph()value = tf.Variable(tf.ones_initializer()(()))value2 = value+3print(tf.get_default_graph().as_graph_def())
你会看到,它创建两个节点
Variable和
Variable/read,该
:0点要在这两个节点获取一个有效的值。但是
Variable:0具有特殊
ref类型,这意味着它可以用作变异操作的输入。Python调用的结果
tf.Variable是一个Python
Variable对象,并且有一些Python魔术可以替代
Variable/read:0或
Variable:0取决于是否需要进行突变。由于大多数操作只有1个端点,
:0因此将其删除。另一个例子是
Queue-
close()方法将创建一个新的
Closeop节点,该节点连接到
Queueop。总而言之-
根据用途对python对象进行操作
Variable并
Queue映射到不同的基础TensorFlow op节点。
对于诸如此类
tf.split或
tf.nn.top_k创建具有多个端点的节点的操作,Python的
session.run调用会自动将输出包装在
tuple或可单独获取
collections.namedtuple的
Tensor对象中。



