tf.contrib.training.bucket
Ленивая буферизация входных тензоров в зависимости от which_bucket.
tf.contrib.training.bucket(
tensors, which_bucket, batch_size, num_buckets, num_threads=1, capacity=32,
bucket_capacities=None, shapes=None, dynamic_pad=False,
allow_smaller_final_batch=False, keep_input=True, shared_name=None, name=None
)
Аргумент tensors может быть списком или словарем тензоров. Значение, возвращаемое функцией, будет того же типа, что и tensors.
Тензоры, входящие в эту функцию, помещаются в бакет, определяемый which_bucket. Каждый бакет имеет свою очередь. Когда бакет содержит batch_size элементов, этот мини-пакет помещается в очередь верхнего уровня. Тензоры, возвращаемые этой функцией, являются результатом декьюинга следующего мини-пакета из этой очереди верхнего уровня.
Эта функция реализована с помощью нескольких очередей. QueueRunner для очередей добавляется в текущую Graph's QUEUE_RUNNER коллекцию.
Поскольку возвращаемые тензоры являются результатом операции декьюинга, их оценка вызовет tf.errors.OutOfRangeError при истощении входной очереди. Если эти тензоры подают в другую входную очередь, её обработчик очереди поймает это исключение; однако, если они используются в вашем основном потоке, вы должны поймать его самостоятельно.
Примечание: Еслиdynamic_padравноFalse, вы должны убедиться, что либо (i) передан аргументshapes, либо (ii) все тензоры вtensorsимеют полностью определенные формы.ValueErrorбудет поднято, если ни одно из этих условий не выполняется.
Если dynamic_pad равно True, достаточно, чтобы был известен ранг тензоров, но отдельные размерности могут иметь форму None. В этом случае для каждого энкоуинга размерности со значением None могут иметь переменную длину; при декьюинге выходные тензоры будут дополнены справа до максимальной формы тензоров в текущем мини-пакете. Для чисел это заполнение имеет значение 0. Для строк это заполнение — пустая строка. См. PaddingFIFOQueue для получения дополнительной информации.
Если allow_smaller_final_batch равно True, при закрытии очередей возвращается меньшее значение пакета, чем batch_size, если элементов недостаточно для заполнения пакета; в противном случае ожидающие элементы отбрасываются. Кроме того, все статические формы выходных тензоров, доступные через метод get_shape(), будут иметь нулевое значение Dimension равное None, и операции, зависящие от фиксированного batch_size, завершатся ошибкой.
| Аргументы | |
|---|---|
tensors | Список или словарь тензоров, представляющий один элемент, который необходимо разбить на бакеты. Вложенные списки не поддерживаются. |
which_bucket | int32 скалярный тензор, принимающий значение в [0, num_buckets). |
batch_size | Новое значение размера пакета, извлеченное из очереди (все очереди будут иметь одинаковый размер). Если передан список, каждый бакет будет иметь различный размер пакета. (целое число Python, скаляр int32 или итерируемый список целых чисел длиной num_buckets). |
num_buckets | Целое число Python, количество бакетов. |
num_threads | Целое число. Количество потоков, вставляющих tensors. |
capacity | Целое число. Максимальное количество мини-пакетов в очереди верхнего уровня, а также (по умолчанию) максимальное количество элементов в каждом бакете. |
bucket_capacities | (Необязательно) None или список целых чисел, емкости каждого бакета. Если None, используется емкость (по умолчанию). Если указан, он должен быть списком целых чисел длиной num_buckets: i-й элемент используется как емкость для i-й очереди бакета. |
shapes | (Необязательно) Формы для каждого примера. По умолчанию — вычисленные формы для tensors. |
dynamic_pad | Булево значение. Разрешить переменные размерности в формах входных данных. Указанные размерности дополняются при декьюинге, чтобы тензоры в пакете имели одинаковые формы. |
allow_smaller_final_batch | (Необязательно) Булево значение. Если True, разрешить, чтобы конечные пакеты были меньше, если в очередях недостаточно элементов. |
keep_input | bool скалярный тензор. Если передан, этот тензор управляет тем, добавляется ли вход в очередь или нет. Если он принимает значение True, то tensors добавляются в бакет; в противном случае они отбрасываются. Этот тензор по существу действует как механизм фильтрации. |
shared_name | (Необязательно). Если задано, очереди будут совместно использоваться под указанным именем в нескольких сессиях. |
name | (Необязательно) Имя для операций. |
| Возвращаемые значения | |
|---|---|
Кортеж (bucket, outputs), где bucket — int32 скалярный тензор, а outputs — список или словарь сгруппированных выходов, соответствующих элементам tensors. Каждый шаг получит новый бакет выходов. |
| Исключения | |
|---|---|
ValueError | Если shapes не указаны и не могут быть выведены из элементов tensors, или если batch_size является последовательностью, но её длина != num_buckets. Также, если bucket_capacities не равно None, но его длина != num_buckets. |
© 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/contrib/training/bucket