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

我在查看TensorFlow的API时注意到,许多已在Python和numpy中存在的数学操作都被重新实现了(或者至少被赋予了TensorFlow的接口)。例如:

enter image description here

这样做的理由是什么呢?

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

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

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

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

而不是

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

不知何故,第一个实现不会干扰用于训练的随机梯度下降算法,所以使用numpy还是tf.add来训练可能并不重要?这是让我感到困惑的一个方面,我什么时候知道应该使用哪一个呢?

或者可能是性能原因?或者是为了让这些操作在需要时可以访问GPU?


回答:

你需要理解的是,你通过这些操作创建了一个tensorflow图,这意味着它们与numpy函数不同,它们是对这些函数的一种抽象。

你可能已经注意到,你需要创建一个会话,然后通过该会话评估函数才能得到结果,而使用numpy函数时它们是直接执行的。这是由于这个图及其函数定义了要做什么,就像写下一个公式一样,但要为特定的x(或其他任何东西)得到结果,你必须为x插入一个值。这就是你在通过会话和eval所做的事情。

因此,总结一下,你用tensorflow定义了一个图,这是一个函数的更抽象的表示,而且这个图在运行时不会被执行,它被定义后,将在你调用eval函数时执行,并通过该会话运行。

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

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注