【发布时间】:2023-03-14 01:57:03
【问题描述】:
使用 Tensorflow 张量作为参数调用 scipy/numpy 特殊函数时是否有任何性能成本?而不是使用tensorflow.math提供的功能?
我问是因为 scipy 上提供了一些特殊功能,但 Tensorflow 上没有(例如scipy.special.erfcx)。我认为 Tensorflow 提供了 tensorflow.math 中的功能,而不是推荐直接使用 numpy 或 scipy,因为这提供了一些加速?
编辑:请注意,我尝试使用@tf.function:
import scipy.special
import tensorflow as tf
@tf.function
def erfcx(x):
return tf.convert_to_tensor(scipy.special.erfcx(x))
但是当我在 tf.Tensor 上调用它时出现错误。
A = tf.random.uniform((5,6))
erfcx(A)
# NotImplementedError: Cannot convert a symbolic Tensor (x:0) to a numpy array.
有什么建议吗?
【问题讨论】:
-
TF 拥有自己的高度优化的 CUDA 内核,用于其操作。因此,当您使用自定义函数时,您会失去这种效率(并非总是因为@tf.function 可以将 python 转换为
tf.Graph)。因此,是的,总是首选使用tf.ops而不是其他操作。但是,您获得的加速类型会有所不同,具体取决于该操作实际上的可并行化程度。 -
@thushv89 请参阅编辑。我尝试使用
@tf.function,但它给出了错误。 -
可能 TF 对它可以转换为 TF 操作的内容有限制。我试图使用
tf.numpy_function,但也失败了。当我启动并运行某些东西时,我会看看并发布答案 -
scioy 函数不能直接使用 tensorflow 对象。他们将首先尝试将它们转换为 numpy 数组。最好让 tensorfow 先做正确的转换。
标签: python-3.x numpy scipy tensorflow2.0