【问题标题】:what does cardinality mean in relation to an image dataset?基数对于图像数据集意味着什么?
【发布时间】:2022-02-12 23:16:51
【问题描述】:

成功创建张量流图像Dataset 后:

dataset = tf.keras.utils.image_dataset_from_directory(...)

返回

找到属于 5 个类的 21397 个文件。 使用 17118 文件进行训练。

有基数法:

dataset.cardinality()

返回一个包含单个值的张量

tf.Tensor(535, shape=(), dtype=int64)

我已经阅读了docs here,但我不明白 535 代表什么或为什么它与文件数不同?

我问,因为我想了解基数如何影响这个等式:

steps_per_epoch = dataset.cardinality().numpy() // batch_size

【问题讨论】:

    标签: python tensorflow math tensorflow-datasets


    【解决方案1】:

    在您的情况下,基数只是批次的四舍五入数:

    import tensorflow as tf
    import pathlib
    
    dataset_url = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"
    data_dir = tf.keras.utils.get_file('flower_photos', origin=dataset_url, untar=True)
    data_dir = pathlib.Path(data_dir)
    
    batch_size = 32
    
    train_ds = tf.keras.utils.image_dataset_from_directory(
      data_dir,
      validation_split=0.2,
      subset="training",
      seed=123,
      image_size=(180, 180),
      batch_size=batch_size)
    
    print(train_ds.cardinality())
    
    Found 3670 files belonging to 5 classes.
    Using 2936 files for training.
    tf.Tensor(92, shape=(), dtype=int64)
    

    公式为:2936/32 = cardinality,因此取决于您的批量大小。

    【讨论】:

    • 这回答了我的问题,非常感谢!仍然不确定我是否完全理解其背后的“原因”
    • 它只返回数据集的批量大小。没什么特别的。
    • 但是为什么我们的基数除以我们的批量大小我们每个时期的步数?那不应该是文件数吗?
    猜你喜欢
    • 2021-05-17
    • 2020-10-12
    • 2013-03-13
    • 2015-12-11
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    相关资源
    最近更新 更多