當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.data.experimental.RandomDataset.padded_batch用法及代碼示例


用法

padded_batch(
    batch_size, padded_shapes=None, padding_values=None, drop_remainder=False,
    name=None
)

參數

  • batch_size tf.int64 標量 tf.Tensor ,表示要在單個批次中組合的此數據集的連續元素的數量。
  • padded_shapes (可選。)tf.TensorShapetf.int64 向量tensor-like 對象的(嵌套)結構,表示每個輸入元素的相應組件在批處理之前應填充到的形狀。任何未知維度都將被填充到每批中該維度的最大大小。如果未設置,則將所有組件的所有尺寸填充到批次中的最大尺寸。如果任何組件具有未知等級,則必須設置 padded_shapes
  • padding_values (可選。)標量形 tf.Tensor 的(嵌套)結構,表示用於各個組件的填充值。 None 表示應該用默認值填充(嵌套)結構。數字類型的默認值為0,字符串類型的默認值為空字符串。 padding_values 應該具有與輸入數據集相同的(嵌套)結構。如果padding_values 是單個元素並且輸入數據集有多個組件,那麽相同的padding_values 將用於填充數據集的每個組件。如果padding_values 是一個標量,那麽它的值將被廣播以匹配每個組件的形狀。
  • drop_remainder (可選。)一個 tf.bool 標量 tf.Tensor ,表示在最後一批少於 batch_size 元素的情況下是否應刪除它;默認行為是不丟棄較小的批次。
  • name (可選。) tf.data 操作的名稱。

返回

  • Dataset 一個Dataset

拋出

將此數據集的連續元素組合成填充批次。

此轉換將輸入數據集的多個連續元素組合成一個元素。

tf.data.Dataset.batch 一樣,結果元素的組件將有一個額外的外部維度,即 batch_size (如果 batch_size 不均勻地劃分輸入元素的數量 N ,則為最後一個元素的 N % batch_size 並且drop_remainderFalse )。如果您的程序依賴於具有相同外部尺寸的批次,則應將 drop_remainder 參數設置為 True 以防止生成較小的批次。

tf.data.Dataset.batch 不同,要批處理的輸入元素可能具有不同的形狀,並且此轉換會將每個組件填充到 padded_shapes 中的相應形狀。 padded_shapes 參數確定輸出元素中每個組件的每個維度的結果形狀:

  • 如果尺寸是常數,則組件將在該尺寸中填充到該長度。
  • 如果維度未知,組件將被填充到該維度中所有元素的最大長度。
A = (tf.data.Dataset
     .range(1, 5, output_type=tf.int32)
     .map(lambda x:tf.fill([x], x)))
# Pad to the smallest per-batch size that fits all elements.
B = A.padded_batch(2)
for element in B.as_numpy_iterator():
  print(element)
[[1 0]
 [2 2]]
[[3 3 3 0]
 [4 4 4 4]]
# Pad to a fixed size.
C = A.padded_batch(2, padded_shapes=5)
for element in C.as_numpy_iterator():
  print(element)
[[1 0 0 0 0]
 [2 2 0 0 0]]
[[3 3 3 0 0]
 [4 4 4 4 0]]
# Pad with a custom value.
D = A.padded_batch(2, padded_shapes=5, padding_values=-1)
for element in D.as_numpy_iterator():
  print(element)
[[ 1 -1 -1 -1 -1]
 [ 2  2 -1 -1 -1]]
[[ 3  3  3 -1 -1]
 [ 4  4  4  4 -1]]
# Components of nested elements can be padded independently.
elements = [([1, 2, 3], [10]),
            ([4, 5], [11, 12])]
dataset = tf.data.Dataset.from_generator(
    lambda:iter(elements), (tf.int32, tf.int32))
# Pad the first component of the tuple to length 4, and the second
# component to the smallest size that fits.
dataset = dataset.padded_batch(2,
    padded_shapes=([4], [None]),
    padding_values=(-1, 100))
list(dataset.as_numpy_iterator())
[(array([[ 1,  2,  3, -1], [ 4,  5, -1, -1]], dtype=int32),
  array([[ 10, 100], [ 11,  12]], dtype=int32))]
# Pad with a single value and multiple components.
E = tf.data.Dataset.zip((A, A)).padded_batch(2, padding_values=-1)
for element in E.as_numpy_iterator():
  print(element)
(array([[ 1, -1],
       [ 2,  2]], dtype=int32), array([[ 1, -1],
       [ 2,  2]], dtype=int32))
(array([[ 3,  3,  3, -1],
       [ 4,  4,  4,  4]], dtype=int32), array([[ 3,  3,  3, -1],
       [ 4,  4,  4,  4]], dtype=int32))

另請參見 tf.data.experimental.dense_to_sparse_batch ,它將可能具有不同形狀的元素組合成 tf.sparse.SparseTensor

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.data.experimental.RandomDataset.padded_batch。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。