根据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
在哪里实现,那也会很好?
-
是。
Prefetch
用于缓冲数据。 -
gen_dataset_ops
和其他gen_xxx_ops
不包含在源代码中,因为它是由bazel自动生成的,用于包装c++实现以供python使用。您应该能够在本地安装中找到这些gen_xxx_ops
代码。例如:${PYTHON_ROOT}/site-packages/tensorflow/python/ops/gen_dataset_ops.py