gpt4 book ai didi

TensorFlow 新的 contrib.data.Dataset 对象是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 15:52:05 28 4
gpt4 key购买 nike

在 TensorFlow 中,旧的输入管道使用一系列队列,以及从这些队列中入队和出队的线程。例如,string_input_producer文件名队列,tf.train.batch作为批处理队列等。

因此,在训练之前,您需要编写:

coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)

为了生成并启动填充所有这些队列的线程。

我已经从这个旧模型升级了我的数据输入管道,以使用当前位于 tf.contrib.data.TFRecordDataset 中的新管道。读取我用来训练的 TFRecord 文件。

我注意到我可以删除:
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)

几行代码,输入管道仍然运行流畅。

所以我的问题是:

新的输入管道如何在引擎盖下工作?它根本不使用队列吗?或者它是否使用它们,然后自己启动它们?此外,如果它确实使用了它们,是否有一种方法可以监控它们的填充程度,因为旧管道会自动执行此操作,而新管道则不会?

最佳答案

tl;dr 队列不再使用,因为它现在已集成到 TF 图中。迭代器管理发生在代码深处。

tf.data.Dataset 获取数据张量的标准方法是打电话next(dataset) .使张量用作网络第一层的输入。在幕后,这会构建一个名为 IteratorV2 的对象。 [1]。然后,一些间接调用到 IteratorV2._next_internal [2] 它分支的地方。如果不急切地执行,它会调用 gen_dataset_ops.iterator_get_next , 否则调用 gen_dataset_ops.iterator_get_next_sync .这是在构建时生成的文件,所以我们在 GitHub 上没有它,但在我的编译中,它通常调用 _pywrap_tensorflow.TFE_Py_FastPathExecute它使用“A Tensor 类型 resource”在 TF 图中创建一个节点。

我找不到任何方法来监控引擎盖下发生的事情。 IteratorV2没有它的方法和 tf.data.Dataset太高了。

链接:

  • https://github.com/tensorflow/tensorflow/blob/r1.14/tensorflow/python/data/ops/iterator_ops.py#L588
  • https://github.com/tensorflow/tensorflow/blob/r1.14/tensorflow/python/data/ops/iterator_ops.py#L588
  • 关于TensorFlow 新的 contrib.data.Dataset 对象是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45047237/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com