Python tf.数据输入管道和每个历元的数据扩充是如何工作的?

Python tf.数据输入管道和每个历元的数据扩充是如何工作的?,python,tensorflow,keras,image-segmentation,Python,Tensorflow,Keras,Image Segmentation,我将此代码()用于我的数据tensorflow管道。但我不明白它是怎么工作的。他们告诉我们,“在训练期间,我们的模型永远不会看到两次完全相同的图片”。但是这是如何工作的呢?我只使用tf.data Map函数和_augment-Function一次。在我的model.fit函数中是否每一步都会发生这种情况 我试着用打印出来的东西来验证我的增强功能。但这只会在第一次发生,而不是每个时代 def get_baseline_数据集(文件名, 标签, preproc\u fn=functools.part

我将此代码()用于我的数据tensorflow管道。但我不明白它是怎么工作的。他们告诉我们,“在训练期间,我们的模型永远不会看到两次完全相同的图片”。但是这是如何工作的呢?我只使用tf.data Map函数和_augment-Function一次。在我的model.fit函数中是否每一步都会发生这种情况

我试着用打印出来的东西来验证我的增强功能。但这只会在第一次发生,而不是每个时代

def get_baseline_数据集(文件名,
标签,
preproc\u fn=functools.partial(\u augment),
螺纹=5,
批次大小=批次大小,
shuffle=True):
num_x=len(文件名)
#从文件名和标签创建数据集
dataset=tf.data.dataset.from_tensor_切片((文件名、标签))
#将预处理函数映射到数据集中的每个元素,以
#多线程的优势
dataset=dataset.map(\u进程\u路径名,num\u并行\u调用=线程)
如果prepoc_fn.keywords不是None且prepoc_fn.keywords中没有“resize”:
断言batch_size==1,“批处理图像必须具有相同的大小”
dataset=dataset.map(预处理\u fn,num\u并行\u调用=线程)
如果随机播放:
dataset=dataset.shuffle(num_x)
#有必要重复我们所有时代的数据
dataset=dataset.repeat().batch(批次大小)
返回数据集
tr\u cfg={
“调整大小”:[img_形状[0],img_形状[1]],
“比例”:1/255。,
“色调增量”:0.1,
“水平翻转”:真,
“宽度偏移范围”:0.1,
“高度偏移范围”:0.1
}
tr_preprocessing_fn=functools.partial(_augment,**tr_cfg)
train\u ds=获取基线数据集(x\u train\u文件名,
y_train_文件名,
预处理\u fn=tr\u预处理\u fn,
批次大小=批次大小)

我引用了 我建议你把这篇文章略读一遍以了解细节

" 总之,不同转换的一个好顺序是:

  • 创建数据集
  • 洗牌(具有足够大的缓冲区大小)
  • 重复
  • 使用多个并行调用映射实际工作(预处理、扩充…)
  • 批处理
  • 预取 "
  • 这应该给你想要的,因为“增强”在“重复”之后。
    希望有帮助。

    该链接已失效。这个似乎有类似的信息。例外是它不再使用repeat。我找不到任何结论,但我得到的印象是,在tf2中,repeat()只在shuffle()之前有用。在这种情况下,它将跨越时代界限。@craq我认为上述博客文章摘要中的格式有点混乱。如果你看最后的操作顺序,它们实际上在洗牌之后有“3次重复”。