Метод prefetch
Метод prefetch класса Dataset позволяет
подготавливать следующие элементы датасета в фоновом
режиме, пока текущие элементы обрабатываются моделью.
Это помогает устранить узкое место ввода-вывода и
существенно ускорить обучение. Метод применяется к
объекту датасета и первым параметром принимает
размер буфера предзагрузки (количество элементов,
которые будут подготовлены заранее). Вторым
параметром можно передать объект
tf.data.experimental.AUTOTUNE, чтобы TensorFlow
сам подобрал оптимальный размер буфера во время
выполнения.
Синтаксис
dataset.prefetch(buffer_size)
Пример
Давайте создадим простой датасет из тензора,
применим к нему метод prefetch с буфером
размером 2 и выведем его элементы:
import tensorflow as tf
t = tf.constant([1, 2, 3, 4, 5])
dataset = tf.data.Dataset.from_tensor_slices(t)
dataset = dataset.prefetch(2)
for element in dataset:
print(element.numpy())
Результат выполнения кода:
1
2
3
4
5
Пример
Давайте используем константу
tf.data.AUTOTUNE, чтобы TensorFlow
автоматически подобрал размер буфера
предзагрузки:
import tensorflow as tf
t = tf.constant([1, 2, 3, 4, 5])
dataset = tf.data.Dataset.from_tensor_slices(t)
dataset = dataset.prefetch(tf.data.AUTOTUNE)
for element in dataset:
print(element.numpy())
Результат выполнения кода:
1
2
3
4
5
Пример
Давайте применим prefetch в цепочке
с методами batch и map, чтобы
ускорить подготовку данных:
import tensorflow as tf
t = tf.constant([1, 2, 3, 4, 5])
dataset = tf.data.Dataset.from_tensor_slices(t)
dataset = dataset.map(lambda x: x * 2)
dataset = dataset.batch(2)
dataset = dataset.prefetch(tf.data.AUTOTUNE)
for element in dataset:
print(element.numpy())
Результат выполнения кода:
[2 4]
[6 8]
[10]