【问题标题】:Tensorflow Dataset API - explanation of behaviorTensorflow Dataset API - 行为解释
【发布时间】:2019-07-07 19:19:40
【问题描述】:

使用下面的代码,我想问一些关于下面到底发生了什么的问题。

dataset = tf.data.TFRecordDataset(filepath)
dataset = dataset.map(parse_function, num_parallel_calls=4)
dataset = dataset.repeat()
dataset = dataset.shuffle(1024)
dataset = dataset.batch(16)
iterator = dataset.make_one_shot_iterator()

1.dataset.map(parse_function, num_parallel_calls=4) - 我们在这里加载了多少条记录?多少会适合内存或某个固定数字?

2.dataset = dataset.repeat() - 我们究竟重复了什么?当前从 .1 点加载的数据?如果是这样,是不是意味着我们不会再加载其他的了?

3. shuffle 究竟是如何工作的?

4.我们可以在map之前使用repeat、shuffle和batch并处理文件路径而不是单独的文件吗?

【问题讨论】:

    标签: tensorflow tensorflow-datasets tfrecord


    【解决方案1】:
    1. Dataset API 中的数据是延迟加载的,所以依赖于后面的操作。现在,由于 shuffle 缓冲区的大小,您一次加载 1024 个样本。它需要填充洗牌缓冲区。当您从迭代器中获取值时,数据将被延迟加载。
    2. 您重复加载的数据,因为重复是在 map 函数之后。这就是为什么建议在解析数据之前进行 shuffle,因为它对内存更友好。
    3. shuffle 加载一些数据(取决于大小 od shuffle buffer),然后对这些数据进行shuffle。
    4. 是的,您可以重复、随机播放然后映射,甚至在performance guide 中也有建议。还有将repeatshuffle合并在一起here的功能。

    【讨论】:

    • 2.所以我们不加载新示例,因为我们一直从一开始加载的这 1024 个示例生成数据集?我问是因为我找到了这样一个example。在回答这个问题时,我们可以看到在shuffle(3) 之后我们有repeat(4),这会导致每个时期的洗牌模式不同。为什么,因为 shufflerepeat 之前?
    • 那是因为shuffle方法中有参数reshuffle_each_iteration默认为true。你可以自己试试,如果你拿你贴的例子的代码,它会随机打乱数据,但是如果你修改它并添加reshuffle_each_iteration=False作为参数到shuffle方法,数据会打乱一次,并保持相同的顺序每次重复。
    • 对我来说,这仍然是一个有点奇怪的行为,但我想我必须习惯它。
    【解决方案2】:
    1. 在这里您正在加载整个数据集。在批处理之前应用地图通常不是一个好主意。 Tensorflow 对张量大小有 2GB 的硬限制。 num_parallel_calls 表示并行应用的映射函数的数量。
    2. dataset.repeat() 没有指定 epoch 值将无限重复数据集。
    3. Shuffle 将随机打乱具有指定缓冲区值的数据集。为了正确打乱,通常最好将此值设置为数据集长度,并在批处理之前应用此函数。
    4. tf.data.TFRecordDataset期望文件名作为输入。一般来说,首选顺序是

      dataset = dataset.shuffle(shuffle_buffer).repeat()
      dataset = dataset.batch(batch_size)
      dataset = dataset.map(map_func)
      

    看看https://www.tensorflow.org/guide/performance/datasets

    【讨论】:

      猜你喜欢
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多