从 tf.data.Dataset 应用过滤器后获取数据集的大小

get the size of dataset after applying a filter from tf.data.Dataset

我想知道如何在应用过滤器后获取数据集的大小或长度。使用 tf.data.experimental.cardinality 给出 -2,这不是我要找的!!我想知道我的数据集中有多少过滤样本,以便能够使用 take() 和 skip() 将其拆分为训练和验证数据集。

示例:

    dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3, 4, 5])
    dataset = dataset.filter(lambda x: x < 4)
    size = tf.data.experimental.cardinality(dataset).numpy()
    #size here is equal to -2 but I want to get the real size which is 3

我的数据集包含图像及其标签,这只是一个说明性示例

查看文档发现基数为-2 表明Tensorflow 无法确定数据集的基数。您可以在 here 中找到它。对于你的例子,你可以做

dataset = dataset.as_numpy_iterator()
dataset = list(dataset)
print(len(dataset))