Spec-Zone.ru › TensorFlow 1.15

tf.data.FixedLengthRecordDataset

Просмотреть исходный код на GitHub

A Dataset наборов фиксированной длины из одного или нескольких двоичных файлов.

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения дополнительных сведений.

tf.compat.v1.data.FixedLengthRecordDataset

tf.data.FixedLengthRecordDataset(
    filenames, record_bytes, header_bytes=None, footer_bytes=None, buffer_size=None,
    compression_type=None, num_parallel_reads=None
)
Аргументы
filenames A tf.string тензор или tf.data.Dataset, содержащий один или несколько имен файлов.
record_bytes A tf.int64 скаляр, представляющий количество байт в каждом наборе данных.
header_bytes (Необязательно.) A tf.int64 скаляр, представляющий количество байт, которые нужно пропустить в начале файла.
footer_bytes (Необязательно.) A tf.int64 скаляр, представляющий количество байт, которые нужно пропустить в конце файла.
buffer_size (Необязательно.) A tf.int64 скаляр, представляющий количество байт для буферизации при чтении.
compression_type (Необязательно.) A tf.string скаляр, принимающий одно из значений "" (без сжатия), "ZLIB", или "GZIP".
num_parallel_reads (Необязательно.) A tf.int64 скаляр, представляющий количество файлов, которые нужно читать параллельно. Если значение больше единицы, записи из прочитанных файлов выводятся вперемешку. Если ваша конвейерная обработка ограничена операциями ввода/вывода, рассмотрите возможность установки этого параметра со значением, большим единицы, чтобы распараллелить ввод/вывод. Если None, файлы будут читаться последовательно.
Атрибуты
element_spec Описание типа элемента этого набора данных.
output_classes Возвращает класс каждого компонента элемента этого набора данных. (устарело)
Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущих версиях. Инструкции по обновлению: Используйте tf.compat.v1.data.get_output_classes(dataset).
output_shapes Возвращает форму каждого компонента элемента этого набора данных. (устарело)
Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущих версиях. Инструкции по обновлению: Используйте tf.compat.v1.data.get_output_shapes(dataset).
output_types Возвращает тип каждого компонента элемента этого набора данных. (устарело)
Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущих версиях. Инструкции по обновлению: Используйте tf.compat.v1.data.get_output_types(dataset).

Методы

apply

Просмотреть исходный код

apply(
    transformation_func
)

Применяет функцию преобразования к этому набору данных.

apply позволяет объединять пользовательские Dataset преобразования, которые представляются функциями, принимающими один Dataset аргумент и возвращающими преобразованный Dataset.

Например:

dataset = (dataset.map(lambda x: x ** 2)
           .apply(group_by_window(key_func, reduce_func, window_size))
           .map(lambda x: x ** 3))
Аргументы
transformation_func Функция, принимающая один Dataset аргумент и возвращающая Dataset.
Возвращаемое значение
Dataset Dataset возвращаемое в результате применения transformation_func к этому набору данных.

batch

Просмотреть исходный код

batch(
    batch_size, drop_remainder=False
)

Объединяет последовательные элементы этого набора данных в пакеты.

Компоненты результирующего элемента будут иметь дополнительное внешнее измерение, которое будет batch_size (или N % batch_size для последнего элемента, если batch_size не делится равномерно на количество входных элементов N и drop_remainder равно False). Если ваша программа зависит от того, что пакеты имеют одинаковое внешнее измерение, вы должны установить аргумент drop_remainder в True чтобы предотвратить создание более маленького пакета.

Аргументы
batch_size A tf.int64 скалярный tf.Tensor, представляющий количество последовательных элементов этого набора данных для объединения в один пакет.
drop_remainder (Необязательно.) A tf.bool скалярный tf.Tensor, представляющий, нужно ли отбросить последний пакет в случае, если он содержит меньше, чем batch_size элементов; по умолчанию меньший пакет не отбрасывается.
Возвращаемое значение
Dataset A Dataset.

cache

Просмотреть исходный код

cache(
    filename=''
)

Кэширует элементы в этом наборе данных.

Аргументы
filename A tf.string скалярный tf.Tensor, представляющий имя каталога на файловой системе, используемого для кэширования элементов в этом наборе данных. Если имя файла не указано, набор данных будет кэширован в оперативной памяти.
Возвращаемое значение
Dataset A Dataset.

concatenate

Просмотреть исходный код

concatenate(
    dataset
)

Создаёт набор данных, объединяя данный набор данных с указанным набором данных.

a = Dataset.range(1, 4)  # ==> [ 1, 2, 3 ]
b = Dataset.range(4, 8)  # ==> [ 4, 5, 6, 7 ]

# The input dataset and dataset to be concatenated should have the same
# nested structures and output types.
# c = Dataset.range(8, 14).batch(2)  # ==> [ [8, 9], [10, 11], [12, 13] ]
# d = Dataset.from_tensor_slices([14.0, 15.0, 16.0])
# a.concatenate(c) and a.concatenate(d) would result in error.

a.concatenate(b)  # ==> [ 1, 2, 3, 4, 5, 6, 7 ]
Аргументы
dataset Dataset, который необходимо объединить.
Возвращаемое значение
Dataset A Dataset.

enumerate

Просмотреть исходный код

enumerate(
    start=0
)

Пронумерует элементы этого набора данных.

Аналогично встроенной функции python enumerate.

Например:

# NOTE: The following examples use `{ ... }` to represent the
# contents of a dataset.
a = { 1, 2, 3 }
b = { (7, 8), (9, 10) }

# The nested structure of the `datasets` argument determines the
# structure of elements in the resulting dataset.
a.enumerate(start=5)) == { (5, 1), (6, 2), (7, 3) }
b.enumerate() == { (0, (7, 8)), (1, (9, 10)) }
Аргументы
start A tf.int64 скалярный tf.Tensor, представляющий начальное значение для нумерации.
Возвращаемое значение
Dataset A Dataset.

filter

Просмотреть исходный код

filter(
    predicate
)

Фильтровать этот набор данных в соответствии с predicate.

d = tf.data.Dataset.from_tensor_slices([1, 2, 3])

d = d.filter(lambda x: x < 3)  # ==> [1, 2]

# `tf.math.equal(x, y)` is required for equality comparison
def filter_fn(x):
  return tf.math.equal(x, 1)

d = d.filter(filter_fn)  # ==> [1]
Аргументы
predicate Функция, сопоставляющая элемент набора данных с булевым значением.
Возвращаемое значение
Dataset Dataset, содержащий элементы из этого набора данных, для которых predicate имеет значение True.

filter_with_legacy_function

Просмотреть исходный код

filter_with_legacy_function(
    predicate
)

Фильтрует этот набор данных согласно predicate. (устарело)

Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущих версиях. Инструкции по обновлению: Используйте `tf.data.Dataset.filter()
Примечание: Это аварийный выход для существующего использования filter который не работает с функциями V2. Новый использования крайне нежелательно, и существующие должны мигрировать на filter так как этот метод будет удален в V2.
Аргументы
predicate Функция, отображающая вложенную структуру тензоров (с формами и типами, определёнными self.output_shapes и self.output_types) в скалярный тензор типа tf.bool.
Возвращаемое значение
Dataset Множество Dataset, содержащее элементы этого набора данных, для которых predicate имеет значение True.

flat_map

Просмотреть исходный код

flat_map(
    map_func
)

Отображает map_func по всему этому набору данных и сплющивает результат.

Используйте flat_map для того, чтобы убедиться, что порядок элементов в наборе данных сохранится. Например, чтобы сплющить набор данных с пакетами в набор данных с их элементами:

a = Dataset.from_tensor_slices([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ])

a.flat_map(lambda x: Dataset.from_tensor_slices(x + 1)) # ==>
#  [ 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

tf.data.Dataset.interleave() — обобщение flat_map, поскольку flat_map генерирует такой же результат, как tf.data.Dataset.interleave(cycle_length=1)

Аргументы
map_func Функция, отображающая элемент набора данных в набор данных.
Возвращаемое значение
Dataset Набор данных Dataset.

from_generator

Просмотреть исходный код

@staticmethod
from_generator(
    generator, output_types, output_shapes=None, args=None
)

Создаёт набор данных Dataset, элементы которого генерируются с помощью generator.

Аргумент generator должен быть вызываемым объектом, возвращающим объект, поддерживающий протокол iter() (например, функцию-генератор). Элементы, сгенерированные generator , должны быть совместимы с заданными аргументами output_types и (необязательными) output_shapes.

Например:

import itertools
tf.compat.v1.enable_eager_execution()

def gen():
  for i in itertools.count(1):
    yield (i, [1] * i)

ds = tf.data.Dataset.from_generator(
    gen, (tf.int64, tf.int64), (tf.TensorShape([]), tf.TensorShape([None])))

for value in ds.take(2):
  print value
# (1, array([1]))
# (2, array([1, 1]))
Примечание: Текущая реализация Dataset.from_generator() использует tf.numpy_function и наследует те же ограничения. В частности, она требует, чтобы операции, связанные с Dataset и Iterator, были размещены на устройстве в том же процессе, что и Python-программа, вызвавшая Dataset.from_generator(). Тело generator не будет сериализовано в GraphDef, и не следует использовать этот метод, если требуется сериализовать модель и восстановить её в другой среде.
Примечание: Если generator зависит от изменяемых глобальных переменных или другого внешнего состояния, помните, что среда выполнения может вызывать generator многократно (чтобы поддерживать повторение Dataset) и в любое время между вызовом Dataset.from_generator() и созданием первого элемента из генератора. Изменение глобальных переменных или внешнего состояния может привести к неопределённому поведению, и мы рекомендуем кэшировать любое внешнее состояние в generator перед вызовом Dataset.from_generator().
Аргументы
generator Вызываемый объект, возвращающий объект, поддерживающий протокол iter(). Если args не указан, generator не должен принимать аргументов; в противном случае он должен принимать столько аргументов, сколько значений в args.
output_types Вложенная структура объектов tf.DType, соответствующих каждому компоненту элемента, возвращаемого generator .
output_shapes (Необязательно.) Вложенная структура объектов tf.TensorShape, соответствующих каждому компоненту элемента, возвращаемого generator .
args (Необязательно.) Кортеж объектов tf.Tensor, которые будут вычислены и переданы generator в качестве аргументов массивов NumPy.
Возвращаемое значение
Dataset Набор данных Dataset.

from_sparse_tensor_slices

Просмотреть исходный код

@staticmethod
from_sparse_tensor_slices(
    sparse_tensor
)

Разделяет каждый тензор ранга N tf.SparseTensor в этом наборе данных построчно. (устарело)

Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: Используйте tf.data.Dataset.from_tensor_slices().
Аргументы
sparse_tensor tf.SparseTensor.
Возвращаемое значение
Dataset Набор данных Dataset ранга (N-1) разреженных тензоров.

from_tensor_slices

Просмотреть исходный код

@staticmethod
from_tensor_slices(
    tensors
)

Создаёт набор данных Dataset, элементы которого представляют собой срезы заданных тензоров.

Обратите внимание, что если tensors содержит массив NumPy, и выполнение в режиме eager отключено, значения будут встроены в граф в виде одной или нескольких операций tf.constant. Для больших наборов данных (> 1 ГБ) это может привести к неэффективному использованию памяти и проблемам с ограничениями размера сериализации графа. Если tensors содержит один или несколько больших массивов NumPy, рассмотрите альтернативу, описанную в этом руководстве.

Аргументы
tensors Элемент набора данных, каждый компонент которого имеет одинаковый размер в 0-й размерности.
Возвращаемое значение
Dataset Набор данных Dataset.

from_tensors

Просмотреть исходный код

@staticmethod
from_tensors(
    tensors
)

Создаёт набор данных Dataset с одним элементом, состоящим из заданных тензоров.

Обратите внимание, что если tensors содержит массив NumPy, и выполнение в режиме eager отключено, значения будут встроены в граф в виде одной или нескольких операций tf.constant. Для больших наборов данных (> 1 ГБ) это может привести к неэффективному использованию памяти и проблемам с ограничениями размера сериализации графа. Если tensors содержит один или несколько больших массивов NumPy, рассмотрите альтернативу, описанную в этом руководстве.

Аргументы
tensors Элемент набора данных.
Возвращаемое значение
Dataset Набор данных Dataset.

interleave

Просмотреть исходный код

interleave(
    map_func, cycle_length=AUTOTUNE, block_length=1, num_parallel_calls=None
)

Отображает map_func по всему этому набору данных и чередует результаты.

Например, можно использовать Dataset.interleave() для одновременной обработки многих входных файлов:

# Preprocess 4 files concurrently, and interleave blocks of 16 records from
# each file.
filenames = ["/var/data/file1.txt", "/var/data/file2.txt", ...]
dataset = (Dataset.from_tensor_slices(filenames)
           .interleave(lambda x:
               TextLineDataset(x).map(parse_fn, num_parallel_calls=1),
               cycle_length=4, block_length=16))

Аргументы cycle_length и block_length управляют порядком создания элементов. cycle_length контролирует количество входных элементов, обрабатываемых одновременно. Если вы установите cycle_length в 1, эта операция будет обрабатывать по одному элементу за раз, и даст идентичные результаты tf.data.Dataset.flat_map. В общем случае эта операция применяет map_func к cycle_length входным элементам, открывает итераторы на возвращённых объектах Dataset, и проходит по ним, генерируя block_length последовательных элементов из каждого итератора, и потребляет следующий входной элемент каждый раз, когда достигает конца итератора.

Например:

a = Dataset.range(1, 6)  # ==> [ 1, 2, 3, 4, 5 ]

# NOTE: New lines indicate "block" boundaries.
a.interleave(lambda x: Dataset.from_tensors(x).repeat(6),
            cycle_length=2, block_length=4)  # ==> [1, 1, 1, 1,
                                             #      2, 2, 2, 2,
                                             #      1, 1,
                                             #      2, 2,
                                             #      3, 3, 3, 3,
                                             #      4, 4, 4, 4,
                                             #      3, 3,
                                             #      4, 4,
                                             #      5, 5, 5, 5,
                                             #      5, 5]
Примечание: Порядок элементов, генерируемых этой операцией, детерминирован, пока map_func — чистая функция. Если map_func содержит какие-либо операции с состоянием, порядок доступа к этому состоянию неопределён.
Аргументы
map_func Функция, отображающая элемент набора данных в набор данных.
cycle_length (Необязательно.) Количество входных элементов, которые будут обрабатываться одновременно. Если не указано, значение будет получено из числа доступных ядер процессора. Если аргумент num_parallel_calls установлен на tf.data.experimental.AUTOTUNE, аргумент cycle_length также определяет максимальную степень параллелизма.
block_length (Необязательно.) Количество последовательных элементов, которые должны быть получены от каждого входного элемента перед переходом к другому входному элементу.
num_parallel_calls (Необязательно.) Если указано, реализация создаёт пул потоков, который используется для асинхронного и параллельного извлечения входов из циклических элементов. По умолчанию поведение заключается в синхронном извлечении входов из циклических элементов без параллелизма. Если используется значение tf.data.experimental.AUTOTUNE, то количество параллельных вызовов устанавливается динамически на основе доступного процессора.
Возвращаемое значение
Dataset Dataset.

list_files

Посмотреть исходный код

@staticmethod
list_files(
    file_pattern, shuffle=None, seed=None
)

Набор данных со всеми файлами, соответствующими одному или нескольким шаблонам glob.

Примечание: По умолчанию этот метод возвращает имена файлов в недетерминированном случайном отсортированном порядке. Передайте seed или shuffle=False для получения результатов в детерминированном порядке.

Пример:

Если на нашем файловой системе есть следующие файлы:

  • /path/to/dir/a.txt
  • /path/to/dir/b.py
  • /path/to/dir/c.py Если мы передаём "/path/to/dir/*.py" в качестве каталога, набор данных будет генерировать:
  • /path/to/dir/b.py
  • /path/to/dir/c.py
Аргументы
file_pattern Строка, список строк или tf.Tensor типа строки (скаляр или вектор), представляющие шаблон(ы) glob-файлов (т.е. шаблон поиска с подстановкой), которые будут сопоставлены.
shuffle (Необязательно.) Если True, имена файлов будут случайным образом перемешаны. По умолчанию True.
seed (Необязательно.) Скаляр tf.int64 tf.Tensor, представляющий случайное семя, которое будет использовано для создания распределения. См. tf.compat.v1.set_random_seed для поведения.
Возвращаемое значение
Dataset Dataset строк, соответствующих именам файлов.

make_initializable_iterator

Посмотреть исходный код

make_initializable_iterator(
    shared_name=None
)

Создаёт Iterator для перечисления элементов этого набора данных. (устаревший)

Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: Используйте for ... in dataset: для итерирования по набору данных. Если вы используете tf.estimator, верните объект Dataset напрямую из вашей функции ввода. В крайнем случае, можно использовать tf.compat.v1.data.make_initializable_iterator(dataset).
Примечание: Возвращаемый итератор будет находиться в незапущенном состоянии, и вы должны запустить операцию iterator.initializer перед его использованием:
dataset = ...
iterator = dataset.make_initializable_iterator()
# ...
sess.run(iterator.initializer)
Аргументы
shared_name (Необязательно.) Если не пусто, возвращаемый итератор будет совместно использоваться под заданным именем в нескольких сессиях, которые используют одни и те же устройства (например, при использовании удалённого сервера).
Возвращаемое значение
Iterator по элементам этого набора данных.
Исключения
RuntimeError Если включено выполнение eager.

make_one_shot_iterator

Посмотреть исходный код

make_one_shot_iterator()

Создаёт Iterator для перечисления элементов этого набора данных. (устаревший)

Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: Используйте for ... in dataset: для итерирования по набору данных. Если вы используете tf.estimator, верните объект Dataset напрямую из вашей функции ввода. В крайнем случае, можно использовать tf.compat.v1.data.make_one_shot_iterator(dataset).
Примечание: Возвращаемый итератор будет автоматически инициализирован. Итератор "one-shot" в настоящее время не поддерживает повторную инициализацию.
Возвращаемое значение
Iterator по элементам этого набора данных.

map

Посмотреть исходный код

map(
    map_func, num_parallel_calls=None
)

Применяет map_func к элементам этого набора данных.

Это преобразование применяет map_func к каждому элементу этого набора данных и возвращает новый набор данных, содержащий преобразованные элементы в том же порядке, что и во входном наборе данных.

Например:

a = Dataset.range(1, 6)  # ==> [ 1, 2, 3, 4, 5 ]

a.map(lambda x: x + 1)  # ==> [ 2, 3, 4, 5, 6 ]

Подпись ввода map_func определяется структурой каждого элемента в этом наборе данных. Например:

# NOTE: The following examples use `{ ... }` to represent the
# contents of a dataset.
# Each element is a `tf.Tensor` object.
a = { 1, 2, 3, 4, 5 }
# `map_func` takes a single argument of type `tf.Tensor` with the same
# shape and dtype.
result = a.map(lambda x: ...)

# Each element is a tuple containing two `tf.Tensor` objects.
b = { (1, "foo"), (2, "bar"), (3, "baz") }
# `map_func` takes two arguments of type `tf.Tensor`.
result = b.map(lambda x_int, y_str: ...)

# Each element is a dictionary mapping strings to `tf.Tensor` objects.
c = { {"a": 1, "b": "foo"}, {"a": 2, "b": "bar"}, {"a": 3, "b": "baz"} }
# `map_func` takes a single argument of type `dict` with the same keys as
# the elements.
result = c.map(lambda d: ...)

Значение или значения, возвращаемые map_func определяют структуру каждого элемента в возвращаемом наборе данных.

# `map_func` returns a scalar `tf.Tensor` of type `tf.float32`.
def f(...):
  return tf.constant(37.0)
result = dataset.map(f)
result.output_classes == tf.Tensor
result.output_types == tf.float32
result.output_shapes == []  # scalar

# `map_func` returns two `tf.Tensor` objects.
def g(...):
  return tf.constant(37.0), tf.constant(["Foo", "Bar", "Baz"])
result = dataset.map(g)
result.output_classes == (tf.Tensor, tf.Tensor)
result.output_types == (tf.float32, tf.string)
result.output_shapes == ([], [3])

# Python primitives, lists, and NumPy arrays are implicitly converted to
# `tf.Tensor`.
def h(...):
  return 37.0, ["Foo", "Bar", "Baz"], np.array([1.0, 2.0] dtype=np.float64)
result = dataset.map(h)
result.output_classes == (tf.Tensor, tf.Tensor, tf.Tensor)
result.output_types == (tf.float32, tf.string, tf.float64)
result.output_shapes == ([], [3], [2])

# `map_func` can return nested structures.
def i(...):
  return {"a": 37.0, "b": [42, 16]}, "foo"
result.output_classes == ({"a": tf.Tensor, "b": tf.Tensor}, tf.Tensor)
result.output_types == ({"a": tf.float32, "b": tf.int32}, tf.string)
result.output_shapes == ({"a": [], "b": [2]}, [])

map_func может принимать в качестве аргументов и возвращать любой тип элемента набора данных.

Обратите внимание, что независимо от контекста, в котором определён map_func (eager или graph), tf.data отслеживает функцию и выполняет её как график. Для использования кода Python внутри функции у вас есть два варианта:

1) Опирайтесь на AutoGraph для преобразования кода Python в эквивалентное вычисление графика. Недостатком этого подхода является то, что AutoGraph может преобразовать не весь код Python.

2) Используйте tf.py_function, который позволяет писать произвольный код Python, но обычно приводит к худшей производительности, чем 1). Например:

d = tf.data.Dataset.from_tensor_slices(['hello', 'world'])

# transform a string tensor to upper case string using a Python function
def upper_case_fn(t: tf.Tensor) -> str:
    return t.numpy().decode('utf-8').upper()

d.map(lambda x: tf.py_function(func=upper_case_fn,
      inp=[x], Tout=tf.string))  # ==> [ "HELLO", "WORLD" ]
Аргументы
map_func Функция, отображающая элемент набора данных на другой элемент набора данных.
num_parallel_calls (Необязательно.) Скаляр tf.int32 tf.Tensor, представляющий количество элементов для асинхронной обработки в параллели. Если не указано, элементы будут обрабатываться последовательно. Если используется значение tf.data.experimental.AUTOTUNE, то количество параллельных вызовов устанавливается динамически на основе доступного процессора.
Возвращаемое значение
Dataset Dataset.

map_with_legacy_function

Посмотреть исходный код

map_with_legacy_function(
    map_func, num_parallel_calls=None
)

Применяет map_func к элементам этого набора данных. (устаревший)

Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: Используйте `tf.data.Dataset.map()
Примечание: Это аварийный выход для существующего использования map , которые не работают с функциями V2. Новые использования крайне не рекомендуется, и существующие должны мигрировать на map, так как этот метод будет удалён в V2.
Аргументы
map_func Функция, отображающая вложенную структуру тензоров (с формами и типами, определёнными self.output_shapes и self.output_types) на другую вложенную структуру тензоров.
num_parallel_calls (Необязательно.) Скаляр tf.int32 tf.Tensor, представляющий количество элементов для асинхронной обработки в параллели. Если не указано, элементы будут обрабатываться последовательно. Если используется значение tf.data.experimental.AUTOTUNE, то количество параллельных вызовов устанавливается динамически на основе доступного процессора.
Возвращаемое значение
Dataset Dataset.

options

Посмотреть исходный код

options()

Возвращает параметры этого набора данных и его входов.

Возвращает
Объект tf.data.Options, представляющий параметры набора данных.

padded_batch

Просмотреть исходный код

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

Объединяет последовательные элементы этого набора данных в заполненные пакеты.

Эта операция объединяет несколько последовательных элементов входного набора данных в один элемент.

Подобно tf.data.Dataset.batch, компоненты результирующего элемента будут иметь дополнительное внешнее измерение, которое будет batch_size (или N % batch_size для последнего элемента, если batch_size не делит количество входных элементов N равномерно и drop_remainder равно False). Если ваша программа зависит от того, что пакеты имеют одинаковое внешнее измерение, вы должны установить аргумент drop_remainder в значение True, чтобы предотвратить создание меньшего пакета.

В отличие от tf.data.Dataset.batch, входные элементы для формирования пакетов могут иметь разные формы, и эта операция заполнит каждый компонент до соответствующей формы в padding_shapes. Аргумент padding_shapes определяет результирующую форму для каждого измерения каждого компонента в элементе выходного значения:

  • Если измерение является постоянным (например, tf.compat.v1.Dimension(37)), компонент будет заполнен до этой длины в этом измерении.
  • Если измерение неизвестно (например, tf.compat.v1.Dimension(None)), компонент будет заполнен до максимальной длины всех элементов в этом измерении.

См. также tf.data.experimental.dense_to_sparse_batch, который объединяет элементы, которые могут иметь разные формы, в tf.SparseTensor.

Аргументы
batch_size Скалярное значение tf.int64 типа tf.Tensor, представляющее количество последовательных элементов этого набора данных, которые нужно объединить в один пакет.
padded_shapes Вложенная структура объектов tf.TensorShape или векторов tf.int64 типа tensor-like, представляющие форму, до которой должен быть заполнен соответствующий компонент каждого входного элемента перед формированием пакета. Любые неизвестные измерения (например, tf.compat.v1.Dimension(None) в tf.TensorShape или -1 в объекте tensor-like) будут заполнены до максимального размера этого измерения в каждом пакете.
padding_values (Необязательно.) Вложенная структура скалярных значений tf.Tensor, представляющих значения заполнения для соответствующих компонентов. По умолчанию это 0 для числовых типов и пустая строка для строковых типов.
drop_remainder (Необязательно.) Скалярное значение tf.bool типа tf.Tensor, представляющее, следует ли отбрасывать последний пакет, если в нем меньше batch_size элементов; по умолчанию меньший пакет не отбрасывается.
Возвращает
Dataset Dataset.

prefetch

Просмотреть исходный код

prefetch(
    buffer_size
)

Создает Dataset, который предварительно загружает элементы из этого набора данных.

Примечание: Как и другие методы Dataset, prefetch работает с элементами входного набора данных. Он не имеет понятия об образцах против пакетов. examples.prefetch(2) предварительно загрузит два элемента (2 образца), а examples.batch(20).prefetch(2) предварительно загрузит 2 элемента (2 пакета по 20 образцов каждый).
Аргументы
buffer_size Скалярное значение tf.int64 типа tf.Tensor, представляющее максимальное количество элементов, которые будут буферизированы при предварительной загрузке.
Возвращает
Dataset Dataset.

range

Просмотреть исходный код

@staticmethod
range(
    *args
)

Создает Dataset последовательности значений с заданным шагом.

Например:

Dataset.range(5) == [0, 1, 2, 3, 4]
Dataset.range(2, 5) == [2, 3, 4]
Dataset.range(1, 5, 2) == [1, 3]
Dataset.range(1, 5, -2) == []
Dataset.range(5, 1) == []
Dataset.range(5, 1, -2) == [5, 3]
Аргументы
*args соответствует семантике python's xrange. len(args) == 1 -> start = 0, stop = args[0], step = 1 len(args) == 2 -> start = args[0], stop = args[1], step = 1 len(args) == 3 -> start = args[0], stop = args[1], step = args[2]
Возвращает
Dataset RangeDataset.
Возможные исключения
ValueError если len(args) == 0.

reduce

Просмотреть исходный код

reduce(
    initial_state, reduce_func
)

Сводит входной набор данных к одному элементу.

Эта операция последовательно вызывает reduce_func на каждом элементе входного набора данных до тех пор, пока набор данных не будет исчерпан, аккумулируя информацию во внутренней переменной состояния. Аргумент initial_state используется для начального состояния, а конечное состояние возвращается в качестве результата.

Например:

  • tf.data.Dataset.range(5).reduce(np.int64(0), lambda x, _: x + 1) производит 5
  • tf.data.Dataset.range(5).reduce(np.int64(0), lambda x, y: x + y) производит 10
Аргументы
initial_state Элемент, представляющий начальное состояние операции.
reduce_func Функция, которая отображает (old_state, input_element) на new_state. Она должна принимать два аргумента и возвращать новый элемент. Структура new_state должна соответствовать структуре initial_state.
Возвращает
Элемент набора данных, соответствующий конечному состоянию операции.

repeat

Просмотреть исходный код

repeat(
    count=None
)

Повторяет этот набор данных count раз.

Примечание: Если этот набор данных зависит от глобального состояния (например, генератора случайных чисел), разные повторения могут генерировать разные элементы.
Аргументы
count (Необязательно.) Скалярное значение tf.int64 типа tf.Tensor, представляющее количество повторений набора данных. По умолчанию (если count равно None или -1) набор данных повторяется бесконечно.
Возвращает
Dataset Dataset.

shard

Просмотреть исходный код

shard(
    num_shards, index
)

Создаёт Dataset, включающий только 1/num_shards этого набора данных.

Этот оператор набора данных очень полезен при распределённом обучении, так как позволяет каждому рабочему процессу читать уникальный подмножество данных.

При чтении одного входного файла вы можете пропустить элементы следующим образом:

d = tf.data.TFRecordDataset(input_file)
d = d.shard(num_workers, worker_index)
d = d.repeat(num_epochs)
d = d.shuffle(shuffle_buffer_size)
d = d.map(parser_fn, num_parallel_calls=num_map_threads)

Важные замечания:

  • Убедитесь, что вы разделили набор данных на части до применения операции случайного выбора (например, shuffle).
  • В целом лучше всего использовать оператор shard в начале конвейера обработки набора данных. Например, при чтении из набора файлов TFRecord разделите набор данных на части до преобразования набора данных в входные образцы. Это предотвращает чтение каждого файла на каждом рабочем процессе. Ниже приведён пример эффективной стратегии разбиения на части в полном конвейере:
d = Dataset.list_files(pattern)
d = d.shard(num_workers, worker_index)
d = d.repeat(num_epochs)
d = d.shuffle(shuffle_buffer_size)
d = d.interleave(tf.data.TFRecordDataset,
                 cycle_length=num_readers, block_length=1)
d = d.map(parser_fn, num_parallel_calls=num_map_threads)
Аргументы
num_shards Скалярное значение tf.int64 типа tf.Tensor, представляющее количество фрагментов, работающих параллельно.
index Скалярное значение tf.int64 типа tf.Tensor, представляющее индекс рабочего процесса.
Возвращает
Dataset Dataset.
Исключения
InvalidArgumentError если значения num_shards или index являются недопустимыми. Примечание: проверка ошибок выполняется в лучшем случае, и ошибки не гарантируются при создании набора данных. (например, предоставление тензора-заполнителя обходит раннюю проверку и вместо этого приведет к ошибке во время вызова session.run.)

shuffle

Просмотреть исходный код

shuffle(
    buffer_size, seed=None, reshuffle_each_iteration=None
)

Случайным образом перемешивает элементы этого набора данных.

Этот набор данных заполняет буфер buffer_size элементами, а затем случайным образом выбирает элементы из этого буфера, заменяя выбранные элементы новыми элементами. Для идеального перемешивания требуется размер буфера, равный или больший, чем полная размерность набора данных.

Например, если ваш набор данных содержит 10 000 элементов, но buffer_size установлено в 1000, то shuffle первоначально выберет случайный элемент только из первых 1000 элементов в буфере. После выбора элемента его место в буфере заменяется следующим (т.е. 1001-м) элементом, сохраняя буфер размером 1000 элементов.

Аргументы
buffer_size Скалярное значение tf.int64 типа tf.Tensor, представляющее количество элементов из этого набора данных, из которых новый набор данных будет выбирать.
seed (Необязательно.) Скалярное значение tf.int64 типа tf.Tensor, представляющее начальное значение для генератора псевдослучайных чисел. См. tf.compat.v1.set_random_seed для поведения.
reshuffle_each_iteration (Необязательно.) Логическое значение, которое, если оно истинно, указывает, что набор данных должен быть псевдослучайным образом перемешан каждый раз при итерации по нему. (По умолчанию True.)
Возвращаемое значение
Dataset Dataset.

skip

Просмотреть исходный код

skip(
    count
)

Создаёт набор данных, пропускающий Dataset элементов из этого набора данных.

Аргументы
count Скалярное значение tf.int64 типа tf.Tensor, представляющее количество элементов из этого набора данных, которые необходимо пропустить, чтобы сформировать новый набор данных. Если count больше размера этого набора данных, новый набор данных не будет содержать элементов. Если count равно -1, пропускаются все элементы набора данных.
Возвращаемое значение
Dataset Dataset.

take

Просмотреть исходный код

take(
    count
)

Создаёт набор данных, содержащий не более count элементов из этого набора данных.

Аргументы
count Скалярное значение tf.int64 типа tf.Tensor, представляющее количество элементов из этого набора данных, которые необходимо взять, чтобы сформировать новый набор данных. Если count равно -1, или если count больше размера этого набора данных, новый набор данных будет содержать все элементы этого набора данных.
Возвращаемое значение
Dataset Dataset.

unbatch

Просмотреть исходный код

unbatch()

Разделяет элементы набора данных на несколько элементов.

Например, если элементы набора данных имеют форму [B, a0, a1, ...], где B может изменяться для каждого входного элемента, то для каждого элемента в наборе данных, набор данных без группировки будет содержать B последовательных элементов формы [a0, a1, ...].

# NOTE: The following example uses `{ ... }` to represent the contents
# of a dataset.
ds = { ['a', 'b', 'c'], ['a', 'b'], ['a', 'b', 'c', 'd'] }

ds.unbatch() == {'a', 'b', 'c', 'a', 'b', 'a', 'b', 'c', 'd'}
Возвращаемое значение
Функция преобразования Dataset, которую можно передать в tf.data.Dataset.apply.

window

Просмотреть исходный код

window(
    size, shift=None, stride=1, drop_remainder=False
)

Объединяет (вложенные) входные элементы в набор данных (вложенных) окон.

«Окно» — это конечный набор данных плоских элементов размером size (или возможно меньше, если нет достаточно входных элементов для заполнения окна и drop_remainder ложно).

Аргумент stride определяет шаг входных элементов, а аргумент shift определяет сдвиг окна.

Например, пусть {...} представляет набор данных:

  • tf.data.Dataset.range(7).window(2) производит { {0, 1}, {2, 3}, {4, 5}, {6} }
  • tf.data.Dataset.range(7).window(3, 2, 1, True) производит { {0, 1, 2}, {2, 3, 4}, {4, 5, 6} }
  • tf.data.Dataset.range(7).window(3, 1, 2, True) производит { {0, 2, 4}, {1, 3, 5}, {2, 4, 6} }

Обратите внимание, что когда преобразование window применяется к набору данных вложенных элементов, оно производит набор данных вложенных окон.

Например:

  • tf.data.Dataset.from_tensor_slices((range(4), range(4))).window(2) производит {({0, 1}, {0, 1}), ({2, 3}, {2, 3})}
  • tf.data.Dataset.from_tensor_slices({"a": range(4)}).window(2) производит { {"a": {0, 1} }, {"a": {2, 3} } }
Аргументы
size Скалярное значение tf.int64 типа tf.Tensor, представляющее количество элементов входного набора данных, которые нужно объединить в окно.
shift (Необязательно.) Скалярное значение tf.int64 типа tf.Tensor, представляющее сдвиг скользящего окна при каждой итерации. По умолчанию size.
stride (Необязательно.) Скалярное значение tf.int64 типа tf.Tensor, представляющее шаг входных элементов в скользящем окне.
drop_remainder (Необязательно.) Скалярное значение tf.bool типа tf.Tensor, представляющее, нужно ли пропускать окно, если его размер меньше window_size.
Возвращаемое значение
Dataset Набор данных (вложенных) окон — конечный набор данных плоских элементов, созданных из (вложенных) входных элементов.

with_options

Просмотреть исходный код

with_options(
    options
)

Возвращает новый набор данных с заданными параметрами.

Параметры «глобальные» в том смысле, что они применяются ко всему набору данных. Если параметры задаются несколько раз, они объединяются, пока различные параметры не используют разные значения, отличные от значений по умолчанию.

Аргументы
options tf.data.Options, идентифицирующий используемые параметры.
Возвращаемое значение
Dataset Набор данных с заданными параметрами.
Исключения
ValueError если параметр задан более одного раза с нестандартным значением

zip

Просмотреть исходный код

@staticmethod
zip(
    datasets
)

Создаёт набор данных путём объединения заданных наборов данных.

Этот метод имеет схожие семантику с встроенной функцией zip() в Python, с основным отличием, что аргумент datasets может быть произвольной вложенной структурой объектов Dataset. Например:

a = Dataset.range(1, 4)  # ==> [ 1, 2, 3 ]
b = Dataset.range(4, 7)  # ==> [ 4, 5, 6 ]
c = Dataset.range(7, 13).batch(2)  # ==> [ [7, 8], [9, 10], [11, 12] ]
d = Dataset.range(13, 15)  # ==> [ 13, 14 ]

# The nested structure of the `datasets` argument determines the
# structure of elements in the resulting dataset.
Dataset.zip((a, b))  # ==> [ (1, 4), (2, 5), (3, 6) ]
Dataset.zip((b, a))  # ==> [ (4, 1), (5, 2), (6, 3) ]

# The `datasets` argument may contain an arbitrary number of
# datasets.
Dataset.zip((a, b, c))  # ==> [ (1, 4, [7, 8]),
                        #       (2, 5, [9, 10]),
                        #       (3, 6, [11, 12]) ]

# The number of elements in the resulting dataset is the same as
# the size of the smallest dataset in `datasets`.
Dataset.zip((a, d))  # ==> [ (1, 13), (2, 14) ]
Аргументы
datasets Вложенная структура наборов данных.
Возвращаемое значение
Dataset Dataset.

__iter__

Просмотреть исходный код

__iter__()

Создаёт итератор для перечисления элементов этого набора данных.

Возвращаемый итератор реализует протокол итератора Python и поэтому может использоваться только в режиме eager.

Возвращает
Объект Iterator над элементами этого набора данных.
Исключения
RuntimeError Если не внутри tf.function и не выполняется жадно.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/data/FixedLengthRecordDataset

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API