包装用于TensorFlow操作的Python函数
2018-11-14 12:02 更新
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 函数计算的张量或单张量的列表.