Метод interleave
Метод interleave класса Dataset применяет
заданную функцию к каждому элементу исходного датасета.
Функция должна возвращать вложенный датасет. Полученные
датасеты объединяются в один, а их элементы чередуются
в порядке следования. Первым параметром передаётся
функция преобразования, вторым - размер блока
cycle_length, третьим - размер блока
block_length, четвёртым - количество
потоков num_parallel_calls.
Синтаксис
Dataset.interleave(map_func, cycle_length, [block_length], [num_parallel_calls])
Пример
Давайте создадим датасет из чисел и применим к каждому
элементу функцию, возвращающую датасет из повторений
этого числа. Параметр cycle_length задаёт,
сколько вложенных датасетов чередуются одновременно:
import tensorflow as tf
def repeat_value(x):
return tf.data.Dataset.from_tensors(x).repeat(2)
ds = tf.data.Dataset.from_tensor_slices([1, 2, 3])
res = ds.interleave(repeat_value, cycle_length=2)
for elem in res:
print(elem.numpy())
Результат выполнения кода:
1
2
1
2
3
3
Пример
Давайте применим метод interleave к датасету
строк. Функция преобразования создаст для каждой строки
датасет из её символов:
import tensorflow as tf
def split_chars(s):
return tf.data.Dataset.from_tensor_slices(tf.strings.bytes_split(s))
ds = tf.data.Dataset.from_tensor_slices(['abcde', 'model.keras'])
res = ds.interleave(split_chars, cycle_length=2)
for elem in res:
print(elem.numpy().decode('utf-8'))
Результат выполнения кода:
a
m
b
o
c
d
e
l
.
k
e
r
a
s
Пример
Давайте укажем параметр block_length, чтобы
из каждого вложенного датасета подряд бралось несколько
элементов перед переключением на следующий:
import tensorflow as tf
def repeat_value(x):
return tf.data.Dataset.from_tensors(x).repeat(3)
ds = tf.data.Dataset.from_tensor_slices([1, 2, 3])
res = ds.interleave(repeat_value, cycle_length=2, block_length=2)
for elem in res:
print(elem.numpy())
Результат выполнения кода:
1
1
2
2
1
3
3
2
3
Смотрите также
-
метод
flat_map,
который применяет функцию и объединяет датасеты подряд -
метод
map,
который применяет функцию к каждому элементу датасета -
метод
concatenate,
который объединяет два датасета в один -
метод
batch,
который объединяет элементы датасета в пакеты