如何使 TensorFlow map() 函数 return 多个值?
How to make the TensorFlow map() function return multiple values?
我正在尝试编写一个函数来增强数据集中的图像。我能够成功地增强现有图像并 return 它,但我希望能够对单个图像和 return 分别对这些增强图像进行多次增强,然后将它们添加到原始数据集中。
增强函数:
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)>
如何使地图函数 return 以这样的方式实现多个值,例如,return h_flipped_image 和 v_flipped_image 以及将它们添加到 train_ds 数据集?
原来我看问题的方向不对。我意识到我根本不需要将增强样本包含在数据集中。相反,我选择在训练过程中增加数据。
由于训练过程需要多个 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() 将不起作用。
我正在尝试编写一个函数来增强数据集中的图像。我能够成功地增强现有图像并 return 它,但我希望能够对单个图像和 return 分别对这些增强图像进行多次增强,然后将它们添加到原始数据集中。
增强函数:
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)>
如何使地图函数 return 以这样的方式实现多个值,例如,return h_flipped_image 和 v_flipped_image 以及将它们添加到 train_ds 数据集?
原来我看问题的方向不对。我意识到我根本不需要将增强样本包含在数据集中。相反,我选择在训练过程中增加数据。
由于训练过程需要多个 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() 将不起作用。