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

Numpy 为什么TensorFlow要重新实现很多数学方程?,numpy,machine-learning,neural-network,tensorflow,conv-neural-network,Numpy,Machine Learning,Neural Network,Tensorflow,Conv Neural Network,我查看了中的API,注意到python和numpy中已经存在的许多数学运算已经重新实现(或者至少提供了一个tensorflow接口)。例如: 这样做有充分的理由吗 我一直在他们的网页上搜索,但找不到他们为什么这么做 不过我确实有一些猜测。我的一个主要猜测是,他们可能希望这些操作对实现的任何神经网络图都有某种反向传播效应。换句话说,实施他们的衍生品。这是原因之一吗?(但愿我知道如何检查我的猜测是否正确) 例如,在线性回归的最基本示例之一中,定义了要实现的预测函数: product = tf.ma

我查看了中的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?

您必须了解,您使用此操作创建了一个tensorflow图,这意味着它们与numpy函数不同,它们更像是它们的抽象

也许您已经注意到,您必须创建一个会话,然后通过该会话对函数进行求值以获得结果,其中使用numpy函数可以直接执行这些函数。这是因为这个图和它的函数定义了做什么,比如写下一个公式,但是要得到一个特定的x(或任何东西)的结果,你必须为x插入一个值。这就是您通过会话和评估所做的

因此,为了总结这一点,您使用tensorflow定义了一个图,它是函数的更抽象的表示形式,并且该图也不会在运行时执行,然后定义它,它将在调用eval函数时执行,并通过该函数运行会话

还请注意,不能直接混合numpy函数和tensorflow函数,但可以定义自己的tensorflow函数()


顺便说一句,我猜大多数tensorflow函数都在引擎盖下使用numpy.:)

为了能够在GPU、TPU、Android、iOS和未来的硬件上运行相同的TF程序,a+b使用TF.add,而不是numpyOk,这正是我所怀疑的。然而,tensorflow似乎可以将两者混合使用。你介意澄清一下吗?例如,
y=tf.matmul(x,W)+b
+
不是张量流操作,但在构建图形时仍然可以正常工作(我假设)。你介意澄清一下tf-ops和np-ops之间的ops组合吗?+运算符重载,这意味着+与tf相同。加上这个,因为x、W和b不是数字或numpy对象,它们是张量。如果你想了解更多关于操作符重载的信息,只需通过谷歌搜索,这很有趣:)这很有意义!:)我知道op超载,所以我知道你的意思。python有点生疏,但这解释了很多。如何检查哪些操作被正式重载?例如,如果我想执行
1/x
,我希望它实际执行
tf.div(1,x)
。但是写tf.op会使代码的可读性大大降低,所以我想避免这种情况。我不知道有什么特殊的资源可以查找所有重载运算符,但我想大多数重载运算符都是这样,否则您应该得到一个错误,因为您不能将默认函数/操作与tensorflow op混合使用,所以只要尝试使用它们,您应该没事!是的,tensorflow为我们做了所有肮脏的工作,这意味着你不必衍生任何东西D