Python 警告:调用迭代器未完全读取正在缓存的数据集。为了避免数据集被意外截断

Python 警告:调用迭代器未完全读取正在缓存的数据集。为了避免数据集被意外截断,python,tensorflow,tensorflow-datasets,Python,Tensorflow,Tensorflow Datasets,这是在我使用tf.data.Dataset时发生的: 调用迭代器未完全读取正在缓存的数据集。为了避免数据集的意外截断,数据集的部分缓存内容将被丢弃。如果您的输入管道类似于dataset.cache().take(k).repeat(),则可能发生这种情况。您应该使用dataset.take(k).cache().repeat() 例如,根据其他问题,它与cache()在方法序列中的位置有关,但我不知道具体做什么 以下是如何重现警告: import tensorflow_datasets as t

这是在我使用
tf.data.Dataset
时发生的:

调用迭代器未完全读取正在缓存的数据集。为了避免数据集的意外截断,数据集的部分缓存内容将被丢弃。如果您的输入管道类似于
dataset.cache().take(k).repeat()
,则可能发生这种情况。您应该使用
dataset.take(k).cache().repeat()

例如,根据其他问题,它与
cache()
在方法序列中的位置有关,但我不知道具体做什么

以下是如何重现警告:

import tensorflow_datasets as tfds

ds = tfds.load('iris', split='train')

ds = ds.take(100)

for elem in ds:
    pass

似乎无论我做什么,无论我在哪里使用
cache()
,都会弹出警告。

我试图在
Google colab
上运行你的代码,它在没有任何警告的情况下成功运行,我正在使用
Tensorflow 2.3

但是,您可以在使用
缓存时遵循此常规方法

如果数据集足够小,可以放入内存中,则可以显著提高速度 使用数据集的
cache()
方法将其内容缓存到
RAM
。通常应在加载和预处理 数据,但在
洗牌
重复
批处理
预取
之前。这边 每个实例将只被读取和预处理一次(而不是每个历元一次)