tensorflow.dataset.shuffle = tensorflow.dataset.prefetch +然后



根据tf.dataset的文档。shuffle,它将填充一个大小为k的缓冲区,然后在里面进行shuffle。虽然我不希望改变数据的顺序,但我希望对其进行缓冲。然后我找到了tf.dataset。prefetch,上面写着"这允许在处理当前元素时准备后面的元素。">

从描述中我猜prefetch是我想要的(即预加载数据,而之前的数据正在训练中使用),但是在试图查看tf.dataset.shuffle的代码,看看他们是否实际上调用tf.dataset.prefetch时,我被困在这些行(粘贴在下面),找不到shuffle_dataset_v3定义的地方。

variant_tensor = gen_dataset_ops.shuffle_dataset_v3(
input_dataset._variant_tensor,  # pylint: disable=protected-access
buffer_size=self._buffer_size,
seed=self._seed,
seed2=self._seed2,
seed_generator=gen_dataset_ops.dummy_seed_generator(),
reshuffle_each_iteration=self._reshuffle_each_iteration,
**self._flat_structure)

我的主要问题是prefetch是否在缓冲数据方面取代shuffle,如果有人能指出我shuffle_dataset_v3在哪里实现,那也会很好?

  1. 是。Prefetch用于缓冲数据。

  2. gen_dataset_ops和其他gen_xxx_ops不包含在源代码中,因为它是由bazel自动生成的,用于包装c++实现以供python使用。您应该能够在本地安装中找到这些gen_xxx_ops代码。例如:${PYTHON_ROOT}/site-packages/tensorflow/python/ops/gen_dataset_ops.py

最新更新