我正在使用TF 1.8并启用了eager模式。
我无法在mapfunc中打印示例。当我从mapfunc中运行tf.executing_eagerly()时,我得到“False”
import os
import tensorflow as tf
tf.logging.set_verbosity(tf.logging.ERROR)
tfe = tf.contrib.eager
tf.enable_eager_execution()
x = tf.random_uniform([16,10], -10, 0, tf.int64)
print(x)
DS = tf.data.Dataset.from_tensor_slices((x))
def mapfunc(ex, con):
import pdb; pdb.set_trace()
new_ex = ex + con
print(new_ex)
return new_ex
DS = DS.map(lambda x: mapfunc(x, [7]))
DS = DS.make_one_shot_iterator()
print(DS.next())
print(new_ex)输出:
Tensor("add:0", shape=(10,), dtype=int64)
外部mapfunc,它工作正常。但在其中,传递的示例没有值,也没有.numpy()属性。
答案 0 :(得分:4)
tf.data
转换实际上是作为图形执行的,因此地图函数本身的主体不会急切执行。有关此问题的更多讨论,请参阅#14732。
如果您真的需要急切执行地图功能,可以使用tf.contrib.eager.py_func
,例如:
DS = DS.map(lambda x: tf.contrib.eager.py_func(
mapfunc,
[x, tf.constant(7, dtype=tf.int64)], tf.int64)
# In TF 1.9+, the next line can be print(next(DS))
print(DS.make_one_shot_iterator().next())
希望有所帮助。
请注意,通过向数据集添加py_func
,单线程Python解释器将在每个生成的元素的循环中。