【问题标题】:How to augment data in tensorflow tfrecords?如何在 tensorflow tfrecords 中增加数据?
【发布时间】:2018-01-19 17:51:05
【问题描述】:

我使用 tfrecords 存储我的数据,并使用 Dataset API 将它们作为张量读取,然后使用 Estimator API 执行训练。现在,我想对数据集中的每个项目进行在线数据增强,但尝试了一段时间后,我找不到出路。我要随机翻转、随机旋转等机械手。

我正在按照this 教程中给出的说明使用自定义估计器,这是我的 CNN,但我不确定数据增强步骤发生在哪里。

【问题讨论】:

  • 你能分享你到目前为止所做的事情吗?这将有助于其他人了解您需要什么以及您是如何失败的。
  • @OlivierMoindrot 检查更新的问题。

标签: tensorflow deep-learning tensorflow-datasets tensorflow-estimator tensorflow-slim


【解决方案1】:

使用 TFRecords 不会阻止您进行数据扩充。

按照您在评论中链接的tutorial,大致情况如下:

  • 您从 TFRecords 文件创建数据集,并解析文件以获取 imagelabel
dataset = tf.data.TFRecordDataset(filenames=filenames)
dataset = dataset.map(parse)
  • 您现在可以应用新的预处理函数在训练期间进行一些数据增强
# Only do it when we are training
if train:
    dataset = dataset.map(train_preprocess)
  • train_preprocess 函数可以是这样的:
def train_preprocess(image, label):
    flip_image = tf.image.random_flip_left_right(image)
    # Other transformations...
    return flip_image, label

【讨论】:

  • 您的train_preprocess 函数仅限于tf.image.random_* 等定义的函数,例如无法使用tf.image 中的函数进行随机旋转。
  • 另外,我不想进行一系列转换。我想一次做一个转换,即当我翻转时——我不想做旋转。你可以争论为什么,但这就是我想学习的方式。我面临的问题是我找不到放置 if-else 块的简洁方法,因为它在生成图形时运行一次,然后总是使用相同的转换。我正在查看tf.cond,但不确定正确的做法是什么。
  • 您可以使用tf.contrib.image.rotate 进行旋转。对于您的第二条评论,不妨看看this answer
  • 我不确定如何使用tf.contrib.image.rotate,因为angles参数需要在运行时为每个图像随机生成。
  • 这些都是很好的问题,在他们自己的 stackoverflow 帖子中会更好。查看 tf.case 中的 switch 语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
相关资源
最近更新 更多