张量流数据集:对一些数据进行排序,然后进行批处理

时间:2018-08-16 13:41:11

标签: python tensorflow dataset pipeline

我的顺序数据的长度范围很广。现在,我的数据集采用随机洗牌的序列,并将批次填充到最长的序列。 (请参见下面的代码)

我想要的是以下内容:

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倍批次大小”数据,然后将其排序并在该批次之后将这些数据分类为“批次大小”示例:/

0 个答案:

没有答案