我正在查看TensorFlow中的API并注意到已经在python和 numpy 中已经存在的许多数学运算已经重新实现(或者至少给出了张量流接口) )。例如:
有充分理由这样做吗?
我一直在搜索他们的页面,但找不到他们为什么这样做。
我确实有一些猜测。我的一个主要猜测是,他们可能希望这些操作对获得实现的神经网络图有一些反向传播效应。换句话说,实施他们的衍生物。这是原因之一吗? (希望我知道如何检查我的猜测是否正确)
例如,在线性回归的一个最基本的例子中,一个定义了想要实现的预测函数:
product = tf.matmul(x,W)
y = product + b
而不是
product = tf.matmul(x,W)
y = tf.add(product, b)
不知何故,第一个实现不会干扰随机梯度下降算法进行训练,所以如果使用numpy或tf.add进行训练可能无关紧要?这是让我感到困惑的一个方面,我何时知道应该使用哪一个。
或许他们是表现原因?或者,如果需要使用GPU,它可以让这些操作访问GPU吗?
答案 0 :(得分:5)
您必须了解使用此操作创建张量流图,这意味着它们与numpy函数不同,它们更像是对它们的抽象。
也许您已经注意到您必须创建一个会话,然后通过该会话评估函数以获得结果,其中numpy函数直接执行。这是因为这个图及其函数定义了如何写下公式,但要获得特定x(或其他)的结果,您必须为x插入一个值。这就是你通过session和eval做的事情。
总而言之,你定义了一个带有tensorflow的图形,它是一个更抽象的函数表示,图形也不是在运行时执行的,然后定义它,它将在你调用eval函数时执行并通过运行会话。
另请注意,您不能直接混合numpy函数和tensorflow函数,但可以定义自己的tensorflow函数(https://www.tensorflow.org/versions/r0.9/how_tos/adding_an_op/index.html)
顺便说一下,我猜大多数张量流函数都是在引擎盖下使用numpy。 :)