如果不在TensorFlow图上,如何评估数据集映射操作?

时间:2018-01-12 21:28:12

标签: tensorflow

我对TensorFlow缺乏经验。我看到的教程解释了tf.Tensor上的Python操作构建了一个抽象的计算图,其中的一部分稍后会被评估。因此,在以下代码中,我期望看到tf.cast将是默认图上的操作。它不是。如果未在默认图表上评估此操作,则如何评估?

>>> import tensorflow as tf
>>> def mapper(src):
...     print('in mapper')
...     return tf.cast(src, tf.float32)
...
>>> d = tf.data.Dataset.range(2).map(mapper)
in mapper
>>> get_next = d.make_one_shot_iterator().get_next()
>>> with tf.Session() as sess:
...     print(sess.run(get_next))
...     print(sess.run(get_next))
...
0.0
1.0
>>> tf.get_default_graph().get_operations()
[<tf.Operation 'start' type=Const>, <tf.Operation 'stop' type=Const>, <tf.Operation 'step' type=Const>, <tf.Operation 'OneShotIterator' type=OneShotIterator>, <tf.Operation 'IteratorToStringHandle' type=IteratorToStringHandle>, <tf.Operation 'IteratorGetNext' type=IteratorGetNext>]

1 个答案:

答案 0 :(得分:1)

map函数作为TensorFlow图函数运行,即wrapped in a Defun decoratorDefun尚未成为公共TensorFlow API的一部分,但您可以在Defun class docstring中了解它。

所以在一个层面上它是一个新的图形,因为这是Defun的实现方式。我相信Dataset在这里使用Defun,以便映射转换可以应用于不同的设备/工作者而不会炸毁图形的大小(因此任何使用的变量都被提升并定义一次)。