代码之家  ›  专栏  ›  技术社区  ›  petrux

具有恒定大小批次的tf.data.Dataset

  •  1
  • petrux  · 技术社区  · 7 年前

    如何强制迭代器使用来自下一次迭代的元素填充较短的批,以便所有批具有相同的大小?

    顺便问一下,这不是训练模特时的明显行为吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   petrux    7 年前

    要有这种行为 .repeat() 方法应在 batch() padded_batch() 一个。因此:

    file_names = [...]
    def my_map_func(record):
        ....
    dataset = tf.data.TFRecordDataset(file_names)\
        .map(map_func=my_map_func)\
        .repeat()\  # here!
        .batch(5)
    
        2
  •  1
  •   Mike W    6 年前

    扩大使用 repeat batch .repeat() 如果你想有一个固定的批量大小,这并不重要。如果你设定 drop_remainder=True 在里面 .batch() 你不会得到的 None 在第一个维度中,您将得到一个固定的批量大小,无论它位于哪个位置 .重复 . 重复和批处理的使用非常直观,例如,让我们定义4个数据集来改变批处理和重复的位置:

    import tensorflow as tf
    dataset = tf.data.Dataset.range(3)
    
    dataset1 = dataset.batch(2,drop_remainder=True)
    dataset1 = dataset1.repeat()
    
    dataset2 = dataset.repeat()
    dataset2 = dataset2.batch(2,drop_remainder=True)
    
    dataset3 = dataset.repeat()
    dataset3 = dataset3.batch(2)
    
    dataset4 = dataset.batch(2)
    dataset4 = dataset4.repeat()
    

    您将得到以下结果:

    :请注意,任何批次中都没有2

    • 形状:(2,):注意批量大小是2,而不是零
    • 第1批:[0,1]
    • 第1批:[0,1]

    :这就是你想要做的,以实现你想要的。注意现在2是如何在第二批中的

    • 形状:(2,):同样,批量大小不是无,并且 重复 不一样
    • 第1批:[2,0]

    :

    • 形状:(?,):因为您没有使用 你得到一个无,但你会得到批次 总是
    • 第2批:[2,0]
    • 第3批:[1,2]

    :

    • 第1批:[0,1]
    • 批次2:[2]您得到的批次大小为“不完整”
    • 第3批:[0,1]
    推荐文章