什么是 tensorflow.matmul?

What is tensorflow.matmul?

从print的输出来看,是函数。但是根据 official document:

An Operation is a node in a TensorFlow Graph that takes zero or more Tensor objects as input, and produces zero or more Tensor objects as output. Objects of type Operation are created by calling a Python op constructor (such as tf.matmul) or tf.Graph.create_op.

它是一个构造函数。所以我认为这是一个 class 的名字。但是,打印 tf.matmul 的 return 值显示它是一个张量,而不是 "Object of type Operation"。 class张量是继承自class运算吗?我试图在 tensorflow 源代码中找到 tf.matmul 的定义,但找不到。

tf.matmul (or tf.linalg.matmul) is a function. You can find its definition in the math_ops 模块。这些函数的行为确实取决于您是使用急切执行(2.x 中的默认值)还是图形模式(1.x 中的默认值)。

通过急切执行,该函数接收到几个急切张量(具有实际值的张量,而不是 "symbolic")和 运行 计算它们的矩阵乘积。你得到的是另一个包含结果的热切张量。

在图形模式下,函数不运行任何计算。它只接收两个符号张量(其值将在稍后确定),向当前图形添加矩阵生产操作并为您提供其结果的符号张量。张量在任何情况下都不会继承操作。该图包含作为操作的节点,这些节点通常具有作为张量的输入 and/or 输出。在图形模式下,像 tf.linalg.matmul 这样的函数通常会给你结果张量,而不是运算,因为它更方便(你很少需要访问运算本身)。当您为这些函数命名时(例如 name='MyMatMul'),它将是操作的名称,并且操作的输出张量(在大多数情况下只有一个)将具有该名称加上 : 及其输出索引(例如 MyMatMul:0)。当你有张量 t 时,你可以使用 t.op 访问生成它的操作。当你有一个操作 op 时,你可以使用 op.inputsop.outputs 访问操作的输入和输出张量,以及它的类型(它代表的操作类型,比如 MatMul) 和 op.type。急切执行无法访问这些属性,因为它们只有在您有图表时才有意义。