TensorFlow 新的 contrib.data.Dataset 对象如何工作?
TensorFlow how do the new contrib.data.Dataset objects work?
在 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 图中。迭代器管理发生在代码中 deep.
从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
of type resource
" 在 TF 图中创建一个节点。
我找不到任何方法来监视引擎盖下发生的事情。 IteratorV2
没有方法,tf.data.Dataset
级别太高了。
链接:
在 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 图中。迭代器管理发生在代码中 deep.
从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
of type resource
" 在 TF 图中创建一个节点。
我找不到任何方法来监视引擎盖下发生的事情。 IteratorV2
没有方法,tf.data.Dataset
级别太高了。
链接: