用法
bucket_by_sequence_length(
    element_length_func, bucket_boundaries, bucket_batch_sizes, padded_shapes=None,
    padding_values=None, pad_to_bucket_boundary=False, no_padding=False,
    drop_remainder=False, name=None
)參數
- 
element_length_func從Dataset到tf.int32中的元素的函數,確定元素的長度,這將確定它進入的桶。 - 
bucket_boundarieslist<int>,桶的上長度邊界。 - 
bucket_batch_sizeslist<int>,每個桶的批量大小。長度應為len(bucket_boundaries) + 1。 - 
padded_shapestf.TensorShape的嵌套結構傳遞給tf.data.Dataset.padded_batch。如果未提供,將使用dataset.output_shapes,這將導致可變長度維度在每批中被填充到最大長度。 - 
padding_values要填充的值,傳遞給tf.data.Dataset.padded_batch。默認填充為 0。 - 
pad_to_bucket_boundarybool,如果False,將批量填充未知大小的尺寸到最大長度。如果True,會將未知大小的維度填充到桶邊界減 1(即每個桶中的最大長度),並且調用者必須確保源Dataset不包含任何長度超過max(bucket_boundaries)的元素。 - 
no_paddingbool,表示是否填充批量特征(特征需要是tf.sparse.SparseTensor類型或相同形狀)。 - 
drop_remainder(可選。)一個tf.bool標量tf.Tensor,表示在最後一批少於batch_size元素的情況下是否應刪除它;默認行為是不丟棄較小的批次。 - 
name(可選。) tf.data 操作的名稱。 
返回
- 
一個
Dataset。 
拋出
- 
ValueError如果len(bucket_batch_sizes) != len(bucket_boundaries) + 1. 
一種按長度對Dataset 中的元素進行分桶的轉換。
Dataset 的元素按長度分組在一起,然後進行填充和批處理。
這對於元素具有可變長度的序列任務很有用。將具有相似長度的元素組合在一起可以減少批次中填充的總比例,從而提高訓練步驟的效率。
下麵是一個基於序列長度將輸入數據分桶到 3 個桶“[0, 3), [3, 5), [5, inf)” 的示例,批量大小為 2。
elements = [
  [0], [1, 2, 3, 4], [5, 6, 7],
  [7, 8, 9, 10, 11], [13, 14, 15, 16, 19, 20], [21, 22]]
dataset = tf.data.Dataset.from_generator(
    lambda:elements, tf.int64, output_shapes=[None])
dataset = dataset.bucket_by_sequence_length(
        element_length_func=lambda elem:tf.shape(elem)[0],
        bucket_boundaries=[3, 5],
        bucket_batch_sizes=[2, 2, 2])
for elem in dataset.as_numpy_iterator():
  print(elem)
[[1 2 3 4]
[5 6 7 0]]
[[ 7  8  9 10 11  0]
[13 14 15 16 19 20]]
[[ 0  0]
[21 22]]
相關用法
- Python tf.compat.v1.data.Dataset.batch用法及代碼示例
 - Python tf.compat.v1.data.Dataset.snapshot用法及代碼示例
 - Python tf.compat.v1.data.Dataset.random用法及代碼示例
 - Python tf.compat.v1.data.Dataset.make_one_shot_iterator用法及代碼示例
 - Python tf.compat.v1.data.Dataset.window用法及代碼示例
 - Python tf.compat.v1.data.Dataset.unbatch用法及代碼示例
 - Python tf.compat.v1.data.Dataset.get_single_element用法及代碼示例
 - Python tf.compat.v1.data.Dataset.padded_batch用法及代碼示例
 - Python tf.compat.v1.data.Dataset.apply用法及代碼示例
 - Python tf.compat.v1.data.Dataset.with_options用法及代碼示例
 - Python tf.compat.v1.data.Dataset.cardinality用法及代碼示例
 - Python tf.compat.v1.data.Dataset.zip用法及代碼示例
 - Python tf.compat.v1.data.Dataset.from_tensors用法及代碼示例
 - Python tf.compat.v1.data.Dataset.make_initializable_iterator用法及代碼示例
 - Python tf.compat.v1.data.Dataset.take用法及代碼示例
 - Python tf.compat.v1.data.Dataset.flat_map用法及代碼示例
 - Python tf.compat.v1.data.Dataset.reduce用法及代碼示例
 - Python tf.compat.v1.data.Dataset.shard用法及代碼示例
 - Python tf.compat.v1.data.Dataset.unique用法及代碼示例
 - Python tf.compat.v1.data.Dataset.shuffle用法及代碼示例
 
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.compat.v1.data.Dataset.bucket_by_sequence_length。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
