【问题标题】:How to make the TensorFlow map() function return multiple values?如何让 TensorFlow map() 函数返回多个值?
【发布时间】:2019-12-16 15:45:01
【问题描述】:

我正在尝试编写一个函数来增加数据集中的图像。我能够成功地增强现有图像并将其返回,但我希望能够对单个图像进行多次增强并单独返回这些增强图像,然后将它们添加到原始数据集中。

增强功能:

def augment_data(image, label):

h_flipped_image = tf.image.flip_left_right(image)
v_flipped_image = tf.image.flip_up_down(image)

return h_flipped_image, label

地图功能:

train_ds = train_ds.map(augment_data)

train_ds 是 tf.data 数据集,形状如下:

<PrefetchDataset shapes: ((None, 224, 224, 3), (None, 238)), types: (tf.float32, tf.bool)>

如何让 map 函数返回多个值,例如,我可以同时返回 h_flipped_image 和 v_flipped_image 并将它们添加到 train_ds 数据集?

【问题讨论】:

  • 我不熟悉 Tensorflow,但这就是映射的一般工作原理。
  • 感谢您的回复!我做了更多的研究,似乎确实不可能让 map 函数返回多个样本并将它们添加到数据集中。我为我的问题找到了不同的解决方案(见下文)。

标签: python tensorflow data-augmentation


【解决方案1】:

事实证明,我没有从正确的方向看问题。我意识到我根本不需要将增强样本包含在数据集中。相反,我选择在训练过程中增加数据。

由于训练过程需要多个 epoch,因此我可以在网络需要之前对图像进行扩充。我通过修改我的 augment_data 函数来做到这一点,所以它现在有一个随机的机会来执行某种增强。每个时期都会对图像执行随机的增强组合,从而每次为网络生成不同的输入图像。

def augment_data(image, label):

rand = tf.random.uniform([])
if(rand > 0.5):
    image = tf.image.flip_up_down(image)

# Additional augmented techniques should be defined here

return image, label

确保您使用 TensorFlow 函数来生成随机数。由于 TensorFlow 解释 python 代码的方式,一个简单的 random.random() 将不起作用。

【讨论】:

    猜你喜欢
    • 2018-04-09
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多