首页 > 解决方案 > tensorflow.dataset.shuffle = tensorflow.dataset.prefetch + 然后在内部洗牌?

问题描述

根据 tf.dataset 的文档。shuffle,它将填充一个具有大小的缓冲区,k然后在其中随机播放。虽然我不想改变数据的顺序,但我希望它被缓冲。然后我发现有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实施也很好?

标签: pythontensorflowtensorflow-datasets

解决方案


  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


推荐阅读