为什么 TensorFlow 有很多数学方程要重新实现?

Why does TensorFlow have a lot of mathematical equations re-implemented?

我正在查看 TensorFlow 中的 API 并注意到 python 和 numpy 中已经存在很多数学运算已重新实现(或至少提供了一个 tensorflow 接口)。例如:

这样做有充分的理由吗?

我一直在他们的页面上搜索,但找不到他们这样做的原因。

不过我确实有一些猜测。我的主要猜测之一是,他们可能希望这些操作对实现的任何神经网络图产生一些反向传播效果。换句话说,实现它们的衍生物。这是原因之一吗? (希望我知道如何检查我的猜测是否正确)

例如,在线性回归的最基本示例之一中,定义了要实现的预测函数:

product = tf.matmul(x,W)
y = product + b

而不是

product = tf.matmul(x,W)
y = tf.add(product, b)

不知何故,第一个实现不会干扰用于训练的随机梯度下降算法,所以使用 numpy 或 tf.add 进行训练可能无关紧要?这是让我困惑的一方面,我什么时候知道我应该使用哪一个。

或者它们可能是性能原因?或者,如果需要使用 GPU,是否允许这些操作访问 GPU?

你必须明白你用这个操作创建了一个张量流图,这意味着它们与 numpy 函数不同,它们更像是它们的抽象。

也许您已经注意到,您必须创建一个会话,然后通过该会话评估函数以获得结果,其中直接执行 numpy 函数。这是因为此图及其函数定义了要执行的操作,例如写下公式,但要获得特定 x(或其他)的结果,您必须为 x 插入一个值。这就是您通过会话和评估所做的事情。

所以总而言之,你用 tensorflow 定义了一个图,它是函数的更抽象表示,图也没有在 运行 时执行,然后它被定义,它将在您调用 eval 函数并通过该 运行 会话。

另请注意,您不能直接混合使用 numpy 函数和 tensorflow 函数,但可以定义自己的 tensorflow 函数(https://www.tensorflow.org/versions/r0.9/how_tos/adding_an_op/index.html)

顺便说一句,我想大多数 tensorflow 函数都在底层使用 numpy。 :)