我的顺序数据的长度范围很广。现在,我的数据集采用随机洗牌的序列,并将批次填充到最长的序列。 (请参见下面的代码)
我想要的是以下内容:
1。)随机取20次batch_size序列
2。)按长度排序(长度可以作为“ utt_lengths”使用)
3。)将此“排序的数据”分为20批
我没有排序的管道:
dataset = tf.data.TFRecordDataset(self.state['train_data_TFR'])
dataset = dataset.map(self.parse,num_parallel_calls=5)
dataset = dataset.shuffle(buffer_size=10000, seed=seed)
dataset = dataset.map(Pipeline.__expand)
shape = {
"length": 1,
"num_of_turns": 1,
"utt_lengths": tf.TensorShape([None])
}
for turn in range(self.state['max_turns'] + 1):
shape["utt_" + str(turn)] = tf.TensorShape([None])
dataset = dataset.apply(tf.contrib.data.padded_batch_and_drop_remainder(self.state['batch_size'],
padded_shapes=shape))
dataset = dataset.map(Pipeline.__deflate)
示例:
batch_size = 3
sort_size = 6
1.) take 6 sequences randomly from your train data:
abc
defg
fb
ghijk
a
dfg
2.) sort by sequence length:
a
fb
abc
dfg
defg
ghijk
3.) batch the data:
1. batch: a, fb, abc
2. batch: dfg, defg, ghijk
我的实现显示在上面的代码中。那是我的管道,没有这种排序。我不知道如何首先获取“ n倍批次大小”数据,然后将其排序并在该批次之后将这些数据分类为“批次大小”示例:/