如何理解TensorFlow中的术语“张量”?

时间:2016-06-16 03:18:40

标签: python tensorflow machine-learning deep-learning tensor

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

  1. tensorVariabletensor之间的关系是什么 与tf.constant,'张量'对比tf.placeholder
  2. 他们是各种类型的张量吗?

4 个答案:

答案 0 :(得分:57)

TensorFlow没有第一类Tensor对象,这意味着运行时执行的底层图中没有Tensor的概念。相反,图形由彼此连接的op节点组成,表示操作。操作为其输出分配内存,可在端点:0:1等上使用,您可以将每个端点视为Tensor。如果您tensor对应nodename:0,则可以将其值设为sess.run(tensor)sess.run('nodename:0')。执行粒度发生在操作级别,因此run方法将执行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)会创建一个名为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+3
print(tf.get_default_graph().as_graph_def())

您会看到它创建了两个节点VariableVariable/read:0端点是在这两个节点上获取的有效值。但是Variable:0具有特殊的ref类型,这意味着它可以用作变异操作的输入。 Python调用tf.Variable的结果是一个Python Variable对象,根据是否需要进行突变,有一些Python魔法可以替换Variable/read:0Variable:0。由于大多数操作只有1个端点,因此会删除:0。另一个示例是Queue - close()方法将创建一个新的Close op节点,该节点连接到Queue op。总结一下 - 对VariableQueue等python对象的操作根据用途映射到不同的底层TensorFlow操作节点。

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

答案 1 :(得分:12)

来自glossary

  

Tensor是一种打字的多维数组。例如,浮点数的4-D数组表示具有维度[批次,高度,宽度,通道]的小批量图像。

基本上,每个数据都是TensorFlow中的Tensor(因此得名):

  • 占位符是您可以向其提供值的张量(feed_dict中的sess.run()参数)
  • 变量是您可以更新的张量(使用var.assign())。从技术上讲,tf.Variable不是tf.Tensor的子类,但
  • tf.constant只是最基本的Tensor,包含创建时给出的固定值

但是,在图表中,每个节点都是一个操作,可以将Tensors作为输入或输出。

答案 2 :(得分:7)

正如其他人已经提到的,是的,它们都是张量。

我理解这些的方法是首先可视化和理解1D,2D,3D,4D,5D和6D张量,如下图所示。 (来源: knoldus

tensor-definition

现在,在TensorFlow的上下文中,您可以想象一个如下所示的计算图,

computation-graph

此处,Op将两个张量ab作为输入; 将张量与自身相乘,然后添加这些乘法的结果,以产生结果张量t3。这些乘法加法 Op发生在计算图中的节点上。

这些张量ab可以是常量张量,可变张量或占位符。无关紧要,只要它们具有相同的数据类型和兼容的形状(或broadcast能够实现)即可。

答案 3 :(得分:0)

TensorFlow的中心数据类型是张量。张量是TensorFlow中计算的基础组件和基本数据结构。在不使用复杂的数学解释的情况下,我们可以说张量(在TensorFlow中)描述了一个多维数值数组,具有零或n维数据集合,由等级,形状和类型决定。阅读更多:What is tensors in TensorFlow?