【问题标题】:Tensorflow Dataset API how to order list_files?Tensorflow Dataset API 如何订购 list_files?
【发布时间】:2017-10-28 13:09:58
【问题描述】:

我正在使用数据集 API list_files 来获取 source 目录和 target 目录中的文件列表,类似于:

source_path = '/tmp/data/source/*.ext1'
target_path = '/tmp/data/target/*.ext2'
source_dataset = tf.data.Dataset.list_files(source_path)
target_dataset = tf.data.Dataset.list_files(data_path)
dataset = tf.data.Dataset.zip((source_dataset, target_dataset))

源和目标目录内容具有相同的顺序文件名,但扩展名不同(例如,源 0001.ext1 目标 0001.ext2)。

但由于 list_files 无论如何都没有排序,因此压缩数据集包含源和目标之间的不匹配。

如何在新的数据集 API 中解决这个问题?

【问题讨论】:

  • 自 2017 年 10 月起,数据集不支持排序。但是,由于文件不多,您可以在 python 中构建文件名对的排序列表,并从该列表中的张量创建数据集。
  • # 根据文档 |注意:此方法的默认行为是以不确定的随机打乱顺序返回文件名。传递种子或 shuffle=False 以获得确定顺序的结果。 |因此,您可以为源数据集和目标数据集尝试相同的种子值,并检查它是否有效。

标签: tensorflow tensorflow-datasets


【解决方案1】:

此方法的默认行为是以不确定的随机打乱顺序返回文件名。传递种子或 shuffle=False 以获得确定顺序的结果。

source_dataset = tf.data.Dataset.list_files(source_path, shuffle=False)

val = 5
source_dataset = tf.data.Dataset.list_files(source_path, seed = val)
target_dataset = tf.data.Dataset.list_files(data_path, seed = val)

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我通过首先对文件路径进行排序来解决它。

    我的文件在 OP 的情况下命名为:

    input image       -> corresponding output
    data/mband/01.tif -> data/gt_mband/01.tif
    data/mband/02.tif -> data/gt_mband/02.tif
    

    代码如下:

    from pathlib import Path
    import tensorflow as tf
    
    DATA_PATH = Path("data")
    
    # Sort the PATHS
    img_paths = sorted(map(str, (DATA_PATH / 'mband').glob('*.tif')))
    mask_paths = sorted(map(str, (DATA_PATH / 'gt_mband').glob('*.tif')))
    
    # These are tensors of PATHS
    # Paths are strings, so order will be preserved
    img_paths = tf.data.Dataset.from_tensor_slices(img_paths)
    mask_paths = tf.data.Dataset.from_tensor_slices(mask_paths)
    
    # Load the actual images
    def parse_image(image_path: 'some_tensor'):
        # Load the image somehow...
        return image_as_tensor
    
    imgs = img_paths.map(parse_image)
    masks = mask_paths.map(parse_mask)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-07
      • 2019-09-24
      • 1970-01-01
      • 2019-11-15
      • 2018-02-18
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多