首页 文章

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

提问于
浏览
1

我对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 回答

  • 1

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

    所以在一个层面上's a new graph because that'是如何实现 Defun 的 . 我相信 Dataset 在这里使用 Defun ,这样映射转换可以应用于不同的设备/工作者而不会炸毁图形的大小(因此任何使用的变量都被提升并定义一次) .

相关问题