当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.numpy_function用法及代码示例


包装一个 python 函数并将其用作 TensorFlow 操作。

用法

tf.numpy_function(
    func, inp, Tout, name=None
)

参数

  • func 一个 Python 函数,它接受 numpy.ndarray 对象作为参数并返回 numpy.ndarray 对象列表(或单个 numpy.ndarray )。此函数必须接受与 inp 中的张量一样多的参数,并且这些参数类型将匹配 inp 中相应的 tf.Tensor 对象。返回的 numpy.ndarray 必须与定义的数量和类型相匹配 Tout 。重要提示:func 的输入和输出 numpy.ndarray 不保证是副本。在某些情况下,它们的底层内存将与相应的 TensorFlow 张量共享。在没有显式 (np.) 复制的情况下,在 python 数据结构中就地修改或存储 func 输入或返回值可能会产生不确定的后果。
  • inp tf.Tensor 对象的列表。
  • Tout tensorflow 数据类型的列表或元组或单个 tensorflow 数据类型(如果只有一个),指示 func 返回的内容。
  • name (可选)操作的名称。

返回

  • func 计算的tf.Tensor 的单个或列表。

给定一个 python 函数 func 将此函数包装为 TensorFlow 函数中的一个操作。 func 必须将 numpy 数组作为其参数并返回 numpy 数组作为其输出。

以下示例使用 np.sinh() 作为图中的操作创建 TensorFlow 图:

def my_numpy_func(x):
  # x will be a numpy array with the contents of the input to the
  # tf.function
  return np.sinh(x)
@tf.function(input_signature=[tf.TensorSpec(None, tf.float32)])
def tf_function(input):
  y = tf.numpy_function(my_numpy_func, [input], tf.float32)
  return y * y
tf_function(tf.constant(1.))
<tf.Tensor:shape=(), dtype=float32, numpy=1.3810978>

tf.py_function 的比较:tf.py_functiontf.numpy_function 非常相似,除了 tf.numpy_function 采用 numpy 数组,而不是 tf.Tensor s。如果您希望函数包含 tf.Tensors ,并且在函数中执行的任何 TensorFlow 操作都是可微的,请使用 tf.py_function

注意:tf.numpy_function 操作具有以下已知限制:

  • 函数体(即 func )不会在 tf.SavedModel 中序列化。因此,如果您需要序列化模型并在不同的环境中恢复它,则不应使用此函数。

  • 该操作必须在与调用 tf.numpy_function() 的 Python 程序相同的地址空间中运行。如果您使用分布式 TensorFlow,则必须在与调用 tf.numpy_function 的程序相同的进程中运行 tf.distribute.Server,您必须将创建的操作固定到该服务器中的设备(例如,使用 with tf.device(): )。

  • 由于该函数采用 numpy 数组,因此您不能通过 numpy_function 获取渐变。如果您需要可区分的东西,请考虑使用 tf.py_function。

  • 结果函数被假定为有状态的并且永远不会被优化。

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.numpy_function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。