通过this链接
tf.data.Dataset.shuffle
方法使用固定大小的缓冲区在项目通过时随机播放。在这种情况下,buffer_size
大于数据集中的示例数,从而确保数据被完全随机(虹膜数据集仅包含150个示例)。
在我重新整理和拆分数据集以创建训练数据时,是否在功能工程之外创建了重新整理方法? "to shuffle the items as they pass through".
答案 0 :(得分:1)
shuffle是一种通常有用的方法,如果您想对数据进行洗礼并且之前没有选择能够进行数据洗礼的选项,例如从生成器中读取数据时。如果您想在每次迭代数据时都对数据进行随机化(通常与repeat方法结合使用),则shuffle方法也非常有用。这是一个简单的示例,说明原因:
dataset1 = tf.data.Dataset.range(5).shuffle(5).repeat(3).make_one_shot_iterator().get_next()
dataset2 = tf.data.Dataset.range(5).shuffle(5, reshuffle_each_iteration=False).repeat(3).make_one_shot_iterator().get_next()
sess = tf.Session()
for i in range(15):
d1, d2 = sess.run([dataset1, dataset2])
print("Dataset1: {}, Dataset2:, {}".format(d1, d2))
结果:
Dataset1: 0, Dataset2:, 3
Dataset1: 3, Dataset2:, 0
Dataset1: 4, Dataset2:, 1
Dataset1: 1, Dataset2:, 2
Dataset1: 2, Dataset2:, 4
Dataset1: 1, Dataset2:, 3
Dataset1: 2, Dataset2:, 0
Dataset1: 3, Dataset2:, 1
Dataset1: 4, Dataset2:, 2
Dataset1: 0, Dataset2:, 4
Dataset1: 3, Dataset2:, 3
Dataset1: 0, Dataset2:, 0
Dataset1: 4, Dataset2:, 1
Dataset1: 1, Dataset2:, 2
Dataset1: 2, Dataset2:, 4
如您所见,第二个数据集将重复其随机播放的元素一次,而第一个数据集则在其每次遍历该数据集时都重新随机播放数据。