阅读(895) (9)

包装用于TensorFlow操作的Python函数

2017-11-14 11:35:46 更新
tf.py_func 函数
py_func(
    func,
    inp,
    Tout,
    stateful=True,
    name=None
)

定义在:tensorflow/python/ops/script_ops.py.

请参阅指南:包装python函数>脚本语言运算符

包装一个 Python 函数,并将其用作 TensorFlow 操作.

给定一个 python 函数 func,它将 numpy 数组作为其输入,并将 numpy 数组作为其输出返回,将此函数作为一个 TensorFlow 图中的操作来包装.下面的代码段构造一个简单的 TensorFlow 图,它在图中调用 np.sinh()NumPy 函数作为图中的一个操作,例如:

def my_func(x):
  # x will be a numpy array with the contents of the placeholder below
  return np.sinh(x)
inp = tf.placeholder(tf.float32)
y = tf.py_func(my_func, [inp], tf.float32)

注意该 tf.py_func() 操作具有以下已知限制:

  • 函数的主体(如 func)将不会在 GraphDef 中序列化.因此,如果需要序列化模型并将其还原到不同的环境中,则不应使用此函数.
  • 该操作必须在与调用 tf. py_func () 的 Python 程序在相同的地址空间中运行.如果您使用的是分布式 TensorFlow,则必须在与调用 tf. py_func () 的程序相同的进程中运行 tf.train.Server,并且必须将创建的操作固定到该服务器中的设备(例如,使用 tf.device():).

参数:

  • func:一个 Python 函数,它接受一个 NumPy ndarray 对象列表,该对象的元素类型与 inp 中相应的 tf.Tensor 对象相匹配,并返回 ndarray(或单个 ndarray 元素)对象列表,该对象的元素类型与 Tout 中相应的值匹配.
  • inp:Tensor 对象列表.
  • Tout:张量流数据类型或单张量流数据类型的列表或元组(如果只有一个),表示 func 返回什么.
  • stateful:(布尔值)如果为 True,则该函数应该被认为是有状态的.如果一个函数是无状态的,当给定相同的输入时,它将返回相同的输出并且没有可观察到的副作用.只有在无状态操作时才执行公共子表达式消除等优化.
  • name:操作的名称(可选).

返回值:

func 函数计算的张量或单张量的列表.