如何理解TensorFlow中的术语`tensor`?

我是TensorFlow的新手。在阅读现有文档时,我发现tensor这个术语非常令人困惑。因此,我需要澄清以下几个问题:

  1. tensorVariabletensortf.constant、’tensor’与tf.placeholder之间的关系是什么?
  2. 它们都是张量的类型吗?

回答:

TensorFlow没有一级张量对象,这意味着在运行时执行的基础图中没有Tensor的概念。相反,图由相互连接的操作节点组成,代表操作。一个操作会为其输出分配内存,这些输出在端点:0:1等处可用,您可以将每个这些端点视为一个Tensor。如果您有一个对应于nodename:0tensor,您可以通过sess.run(tensor)sess.run('nodename:0')获取其值。执行的粒度发生在操作级别,因此run方法将执行操作,这将计算所有的端点,而不仅仅是:0端点。可能存在没有输出的操作节点(如tf.group),在这种情况下,没有与之关联的张量。没有底层操作节点是不可能有张量的。

您可以通过执行以下操作来检查基础图中发生的情况

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)创建一个名为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())

您会看到它创建了两个节点VariableVariable/read,这两个节点的:0端点都是有效的值可以获取。然而,Variable:0具有特殊的ref类型,意味着它可以用作变异操作的输入。Python调用tf.Variable的结果是一个PythonVariable对象,并且有一些Python魔法来根据是否需要变异来替换Variable/read:0Variable:0。由于大多数操作只有一个端点,:0会被省略。另一个例子是Queue —— close()方法将创建一个新的Close操作节点,该节点连接到Queue操作。为了总结 —— 对像VariableQueue这样的Python对象的操作会根据使用情况映射到不同的底层TensorFlow操作节点上。

对于像tf.splittf.nn.top_k这样的操作,它们创建具有多个端点的节点,Python的session.run调用会自动将输出包装在tuplecollections.namedtuple中的Tensor对象中,这些对象可以单独获取。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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