从TensorFlow中的张量中高效删除零图像

时间:2020-01-17 12:37:58

标签: tensorflow image-processing deep-learning tensor tensorflow-datasets

我有一组50形状为(50,128,128,1)的图像,在TensorFlow中表示为张量。假设25th30th图像只是零幅图像,但我不知道哪些图像都预先为零(本例中的25th30th只是为了使情况更清楚)。我希望删除此类图像并使用张量为(48,128,128,1)的张量。如何在Tensorflow中实现这一点而又不遍历张量的0th维度50次并检查每个图像是否为tf.reduce_sum(tf.abs(image_i))>0

1 个答案:

答案 0 :(得分:2)

您可以使用Dataset.map(some_fn)。在这里,您可以定义some_fn,该逻辑将使用逻辑tf.reduce_sum()检查每个张量的值。因此,如果total的值为零,则可以忽略它,否则可以保留它。

def some_fn():
    image = tf.fill([8,8], 0)# dummy tensor values
    image_row = tf.slice(image, [1,0], [1, -1])
    total = tf.reduce_sum(tf.abs(image_row)) # total = 0
    return total

您可以阅读更多here。这不是一个循环,它在每个元素(您所用的每个图像)上并行工作。因此速度很快。