参考链接:https://blog.csdn.net/jiongnima/article/details/80555387
tf.py_func(
func,
inp,
Tout,
stateful=True,
name=None
)
在使用tf.py_func的过程中,主要核心是使用前三个参数。
第一个参数func,是最重要的,是一个用户自定义的函数,输入numpy array, 输出也是numpy array, 在该函数中,可以自由使用np.操作。
第二个参数inp,是func函数接收的输入,是一个列表。
第三个参数Tout,指定了func函数返回的numpy array转化成tensor后的格式,如果是返回多个值,就是一个列表或元组;如果只有一个返回值,就是一个单独的dtype类型(当然也可以用列表括起来)
最后来看看tf.py_func的输出:
Returns:
A list of Tensor or a single Tensor which func computes.
输出是一个tensor(张量)列表或单个tensor。
到这里,tf.py_func的原理也就逐渐明晰了。首先,tf.py_func接收的是tensor(张量),然后将其转化为numpy array送入func(就是自定义的那条函数),最后再将func函数输出的Numpy array转化为tensor返回。
在使用过程中,有两个需要注意的地方,第一就是func函数的返回值类型一定要和Tout指定的tensor类型一致。第二就是,如下图所示,tf.py_func()中的func是脱离Graph的。在func中不能定义可训练的参数参与网络训练(反传)。