Python 如何理解TensorFlow中的“tensor”一词?

Python 如何理解TensorFlow中的“tensor”一词?,python,tensorflow,machine-learning,deep-learning,tensor,Python,Tensorflow,Machine Learning,Deep Learning,Tensor,我是TensorFlow的新手。在阅读现有文档时,我发现术语张量非常令人困惑。因此,我需要澄清以下问题: 张量和变量,张量 相对于tf.常数,'tensor'相对于tf.占位符 它们都是张量吗 从: 张量是一种类型化的多维数组。例如,一个4-D浮点数数组表示一小批图像,其尺寸为[批次、高度、宽度、通道] 基本上,每个数据都是TensorFlow中的张量(因此得名): 占位符是可以向其输入值的张量(使用sess.run()中的feed\u dict参数) 变量是可以更新的张量(使用var.ass

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

  • 张量
    变量
    张量

    相对于
    tf.常数,'tensor'相对于
    tf.占位符
  • 它们都是张量吗
  • 从:

    张量是一种类型化的多维数组。例如,一个4-D浮点数数组表示一小批图像,其尺寸为[批次、高度、宽度、通道]

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

    • 占位符是可以向其输入值的张量(使用
      sess.run()
      中的
      feed\u dict
      参数)
    • 变量是可以更新的张量(使用
      var.assign()
      )。从技术上讲,
      tf.Variable
      不是
      tf.Tensor
      的子类
    • tf.constant
      只是最基本的张量,它包含一个在创建时给定的固定值


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

    TensorFlow没有一级的张量对象,这意味着在运行时执行的基础图中没有张量的概念。相反,该图由相互连接的op节点组成,表示操作。操作为其输出分配内存,这些输出在端点
    :0
    :1
    等上可用,您可以将这些端点中的每一个都视为
    张量。如果您有与
    nodename:0
    对应的
    tensor
    ,则可以将其值作为
    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\u dict={“placeholder:0”:2}
    feed\u dict={value:2}
    进行馈送。您不能在同一个
    会话中馈送和获取占位符。运行
    调用,但您可以通过在顶部附加
    tf.identity
    节点并获取占位符来查看结果

    对于变量

    tf.reset_default_graph()
    value = tf.Variable(tf.ones_initializer()(()))
    value2 = value+3
    print(tf.get_default_graph().as_graph_def())
    
    您将看到它创建了两个节点
    Variable
    Variable/read
    :0
    端点是在这两个节点上获取的有效值。但是
    变量:0
    有一个特殊的
    ref
    类型,这意味着它可以用作变异操作的输入。Python调用
    tf.Variable
    的结果是一个Python
    Variable
    对象,有一些Python魔法可以替代
    Variable/read:0
    Variable:0
    ,这取决于是否需要变异。由于大多数操作只有一个端点,因此会删除
    :0
    。另一个例子是
    Queue
    --
    close()
    方法将创建一个新的
    close
    op节点,该节点连接到
    Queue
    op。总而言之,
    Variable
    Queue
    等python对象上的操作会根据使用情况映射到不同的底层TensorFlow op节点


    对于像
    tf.split
    tf.nn.top_k
    这样创建具有多个端点的节点的操作,Python的
    session.run
    调用会自动将输出包装在
    tuple
    集合中。命名为
    Tensor
    对象的tuple
    ,这些对象可以单独获取。

    如其他人所述,是的,它们都是张量

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

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

    这里,
    Op
    s采用两个张量
    a
    b
    作为输入;将张量与自身相乘,然后将这些相乘的结果相加,以生成结果张量
    t3
    。这些乘法和加法发生在计算图中的节点上


    这些张量
    a
    b
    可以是常量张量、变量张量或占位符。这并不重要,只要它们具有相同的数据类型和兼容的形状(或能够广播),就可以实现操作。

    TensorFlow的中心数据类型是tensor。张量是计算的基本组成部分,也是TensorFlow中的基本数据结构。在不使用复杂数学解释的情况下,我们可以说张量(在TensorFlow中)描述了一个多维数值数组,由秩、形状和类型决定的零维或n维数据集合。阅读更多信息:

    是的,张量就像一个对象,它可以是一个字符串、一个变量等等……我认为理解TensorFlow中的数据和操作对这个问题很有帮助。我不同意。如果您查看tensorflow白皮书的第2节:“在tensorflow图中,每个节点都有零个或多个输入和零个或多个输出,并表示操作的实例化”。变量、常量和占位符是节点,也就是操作的实例化,就像tf.mul或