Метод padded_batch класса Dataset
Метод padded_batch класса Dataset объединяет последовательные элементы датасета в пакеты, при этом элементы внутри пакета дополняются до одинаковой формы. Это особенно полезно при работе с последовательностями разной длины, например текстами или временными рядами. Первым параметром передаётся размер пакета, вторым - словарь или кортеж с формами дополнения padded_shapes, третьим - значения заполнения padding_values, четвёртым - значение drop_remainder, определяющее, отбрасывать ли последний неполный пакет.
Синтаксис
Dataset.padded_batch(batch_size, padded_shapes=None, padding_values=None, drop_remainder=False)
Пример
Давайте создадим датасет из последовательностей разной длины и объединим их в пакеты с дополнением:
import tensorflow as tf
dataset = tf.data.Dataset.from_tensor_slices([[1, 2], [3, 4, 5], [6]])
dataset = dataset.padded_batch(2, padded_shapes=[3])
for batch in dataset:
print(batch)
Результат выполнения кода:
tf.Tensor(
[[1 2 0]
[3 4 5]], shape=(2, 3), dtype=int32)
tf.Tensor(
[[6 0 0]], shape=(1, 3), dtype=int32)
Пример
Давайте укажем значение заполнения -1 и отбросим последний неполный пакет:
import tensorflow as tf
dataset = tf.data.Dataset.from_tensor_slices([[1, 2], [3, 4, 5], [6]])
dataset = dataset.padded_batch(
2,
padded_shapes=[3],
padding_values=-1,
drop_remainder=True
)
for batch in dataset:
print(batch)
Результат выполнения кода:
tf.Tensor(
[[ 1 2 -1]
[ 3 4 5]], shape=(2, 3), dtype=int32)
Пример
Давайте создадим датасет из пар значение-метка и дополним обе компоненты:
import tensorflow as tf
values = [[1, 2], [3, 4, 5], [6]]
labels = [[0], [1], [2]]
dataset = tf.data.Dataset.from_tensor_slices((values, labels))
dataset = dataset.padded_batch(
2,
padded_shapes=([3], [1]),
padding_values=(0, -1)
)
for batch in dataset:
print(batch)
Результат выполнения кода:
(<tf.Tensor: shape=(2, 3), dtype=int32, numpy=
array([[1, 2, 0],
[3, 4, 5]], dtype=int32)>, <tf.Tensor: shape=(2, 1), dtype=int32, numpy=
array([[ 0],
[ 1]], dtype=int32)>)
(<tf.Tensor: shape=(1, 3), dtype=int32, numpy=array([[6, 0, 0]], dtype=int32)>, <tf.Tensor: shape=(1, 1), dtype=int32, numpy=array([[2]], dtype=int32)>)
Смотрите также
-
класс
Dataset,
который представляет собой набор элементов -
метод
batch,
который объединяет элементы в пакеты без дополнения -
метод
ragged_batch,
который объединяет элементы в пакеты в виде рваных тензоров -
метод
from_tensor_slices,
который создает датасет из срезов тензора