【问题标题】:TensorFlow Dataset `.map` - Is it possible to ignore errors?TensorFlow 数据集`.map` - 是否可以忽略错误?
【发布时间】:2020-09-08 21:58:17
【问题描述】:

短版:

当使用 Dataset map 操作时,是否可以指定 map 调用导致错误的任何“行”被悄悄过滤掉,而不是让错误冒泡并终止整个会话?

具体说明:

我设置了一个输入管道(或多或少)执行以下操作:

  1. 读取本地存储的图像的一组文件路径(不同尺寸的图像)
  2. 从 csv 中读取一组建议的“边界框”
  3. 生成所有图像路径到边界框组合的集合
  4. 读取并解码图像,然后使用tf.image.crop_to_bounding_box为每个组合生成一组“裁剪”图像

我的问题是,在某些(非常罕见的)情况下,我建议的边界框超出了给定图像的范围,因此(可以理解)tf.image.crop_to_bounding_box 会抛出类似这样的错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError: assertion failed: [width must be >= target + offset.]

终止会话。

如果这些错误被简单地忽略并且管道移动到下一个组合,我会更喜欢它。

(我知道针对此特定问题的正确修复方法是在之前的步骤中花时间检查每个边界框和图像尺寸大小,然后使用filter 操作将它们过滤掉在它通过裁剪操作到达map之前。我想知道是否有一种简单的方法可以忽略错误并继续下一个案例,以便在这种特定情况下以及更一般的情况下易于实施)

【问题讨论】:

    标签: tensorflow tensorflow-datasets


    【解决方案1】:

    tf.contrib.data.ignore_errors。我自己从未尝试过,但根据the docs 的用法很简单

    dataset = dataset.map(some_map_function)
    dataset = dataset.apply(tf.contrib.data.ignore_errors())
    

    它应该简单地通过输入(即返回相同的数据集),但忽略任何引发错误的内容。

    【讨论】:

      【解决方案2】:

      对于 TensorFlow 2

      dataset = dataset.apply(tf.data.experimental.ignore_errors())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-11
        • 2018-10-03
        • 2023-01-30
        • 2018-02-06
        • 2021-06-27
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多