首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等尺寸批次的tf.data.Dataset

等尺寸批次的tf.data.Dataset
EN

Stack Overflow用户
提问于 2018-11-19 21:17:32
回答 2查看 1.4K关注 0票数 2

我有一个包含19个元素的数据集,批次大小为10。我将dataset设置为继续迭代相同的元素,但我注意到最后一批只有4个元素,而不是5个,然后从5、5、5、4开始,等等。

如何才能强迫迭代器用来自下一次迭代的元素填充较短的批,从而使所有批具有相同的大小?

P.S.只是想了解一下,这难道不是训练模特时的明显行为吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-20 08:36:51

要具有这种行为,.repeat()方法应该在batch()padded_batch()方法之前调用。所以:

代码语言:javascript
复制
file_names = [...]
def my_map_func(record):
    ....
dataset = tf.data.TFRecordDataset(file_names)\
    .map(map_func=my_map_func)\
    .repeat()\  # here!
    .batch(5)
票数 2
EN

Stack Overflow用户

发布于 2019-10-06 17:59:15

为了扩展repeatbatch的使用,我将这样说。实际上,如果您想要一个固定的.repeat(),那么放置batch_size的位置并不重要。如果在drop_remainder=True中设置.batch(),那么在第一个维度中就不会得到None,那么无论.repeat()的位置如何,您都会得到一个固定的批大小。重复和批处理非常直观地使用,例如,让我们定义4个数据集,改变批处理和重复的位置:

代码语言:javascript
复制
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()

您将得到这样的结果:

Dataset1:注意2从来不在任何批处理中

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

Dataset2:这就是你想要做的事情。注意现在2在第二批中的情况。

  • 形状:(2,):同样,批次大小不是零,repeat的位置也不一样。
  • 第1批: 0,1
  • 第1批: 2,0

Dataset3

  • shape:(?,):因为您没有使用drop_remainder=True,所以您将得到一个None,但是您将得到批总是固定大小为2的
  • 第1批: 0,1
  • 第2批: 2,0
  • 第3批: 1,2

Dataset4

  • 形状(?,):a与Dataset3相同
  • 第1批: 0,1
  • 批2: 2你得到“不完全”的批次大小
  • 第3批: 0,1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53382769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档