gpt4 book ai didi

python - 如何为可变大小的图像配置 tf.data.Dataset?

转载 作者:行者123 更新时间:2023-12-04 04:14:46 26 4
gpt4 key购买 nike

我正在 Tensorflow 2.1 上设置图像数据管道。我正在使用具有可变形状(h、w、3)的 RGB 图像的数据集,但我找不到使其工作的方法。当我调用 tf.data.Dataset.batch() 时出现以下错误:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot batch tensors with different shapes in component 0. First element had shape [256,384,3] and element 3 had shape [160,240,3]
我找到了 padded_batch方法,但我不希望我的图像被填充为相同的形状。

编辑:

我想我通过使用函数 tf.data.experimental.dense_to_ragged_batch 找到了一些解决方法。 (将密集张量表示转换为参差不齐的表示)。

Unlike tf.data.Dataset.batch, the input elements to be batched may have different shapes, and each batch will be encoded as a tf.RaggedTensor



但是我还有另一个问题。我的数据集包含图像及其相应的标签。当我使用这样的功能时:
ds = ds.map(
lambda x: tf.data.experimental.dense_to_ragged_batch(batch_size)
)

我收到以下错误,因为它试图将函数映射到整个数据集(因此映射到图像和标签),这是不可能的,因为它只能应用于 1 个单张量(而不是 2)。
TypeError: <lambda>() takes 1 positional argument but 2 were given
有没有办法指定我希望将转换应用于两个元素中的哪个元素?

最佳答案

我刚刚遇到了同样的问题。解决方案原来是将数据作为 2 个数据集加载,然后使用 dataet.zip() 合并它们。

images = dataset.map(parse_images, num_parallel_calls=tf.data.experimental.AUTOTUNE)
images = dataset_images.apply(
tf.data.experimental.dense_to_ragged_batch(batch_size=batch_size, drop_remainder=True))

dataset_total_cost = dataset.map(get_total_cost)
dataset_total_cost = dataset_total_cost.batch(batch_size, drop_remainder=True)

dataset = dataset.zip((dataset_images, dataset_total_cost))

关于python - 如何为可变大小的图像配置 tf.data.Dataset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60932166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com