tf.compat.v1.data.Iterator
Представляет состояние итерации по Dataset.
tf.compat.v1.data.Iterator(
iterator_resource, initializer, output_types, output_shapes, output_classes
)
| Аргументы | |
|---|---|
iterator_resource | Скалярный tf.resource tf.Tensor типа ресурс, представляющий итератор. |
initializer | tf.Operation, который необходимо выполнить для инициализации этого итератора. |
output_types | (Вложенная) структура объектов tf.DType, соответствующих каждому компоненту элемента этого итератора. |
output_shapes | (Вложенная) структура объектов tf.TensorShape, соответствующих каждому компоненту элемента этого итератора. |
output_classes | (Вложенная) структура объектов Python type, соответствующих каждому компоненту элемента этого итератора. |
| Исключения | |
|---|---|
TypeError | Если output_types, output_shapes или output_classes не указаны. |
| Атрибуты | |
|---|---|
element_spec | Спецификация типа элемента этого итератора. Для получения дополнительной информации ознакомьтесь с данным руководством. |
initializer | tf.Operation, который необходимо выполнить для инициализации этого итератора. |
output_classes | Возвращает класс каждого компонента элемента этого итератора. (устаревшее) Ожидаемые значения — |
output_shapes | Возвращает форму каждого компонента элемента этого итератора. (устаревшее) |
output_types | Возвращает тип каждого компонента элемента этого итератора. (устаревшее) |
Методы
from_string_handle
@staticmethod
from_string_handle(
string_handle, output_types, output_shapes=None, output_classes=None
)
Создаёт новый, неинициализированный Iterator на основе заданного дескриптора.
Этот метод позволяет определить «подкачиваемый» итератор, где вы можете выбирать между конкретными итераторами, передавая значение в вызов tf.Session.run. В этом случае string_handle будет tf.compat.v1.placeholder, и вы будете подкачивать его значением tf.data.Iterator.string_handle на каждом шаге.
Например, если у вас есть два итератора, которые отмечают текущую позицию в обучающем наборе данных и наборе данных для тестирования, вы можете выбрать, какой использовать на каждом шаге следующим образом:
train_iterator = tf.data.Dataset(...).make_one_shot_iterator()
train_iterator_handle = sess.run(train_iterator.string_handle())
test_iterator = tf.data.Dataset(...).make_one_shot_iterator()
test_iterator_handle = sess.run(test_iterator.string_handle())
handle = tf.compat.v1.placeholder(tf.string, shape=[])
iterator = tf.data.Iterator.from_string_handle(
handle, train_iterator.output_types)
next_element = iterator.get_next()
loss = f(next_element)
train_loss = sess.run(loss, feed_dict={handle: train_iterator_handle})
test_loss = sess.run(loss, feed_dict={handle: test_iterator_handle})
| Аргументы | |
|---|---|
string_handle | Скалярный tf.Tensor типа tf.string, который вычисляется в дескриптор, созданный методом Iterator.string_handle(). |
output_types | (Вложенная) структура объектов tf.DType, соответствующих каждому компоненту элемента этого набора данных. |
output_shapes | (Необязательно.) (Вложенная) структура объектов tf.TensorShape, соответствующих каждому компоненту элемента этого набора данных. Если опущено, форма каждого компонента не ограничена. |
output_classes | (Необязательно.) (Вложенная) структура объектов Python type, соответствующих каждому компоненту элемента этого итератора. Если опущено, каждый компонент предполагается типа tf.Tensor. |
| Возвращаемое значение | |
|---|---|
Iterator. |
from_structure
@staticmethod
from_structure(
output_types, output_shapes=None, shared_name=None, output_classes=None
)
Создаёт новый, неинициализированный Iterator с заданной структурой.
Этот метод построения итераторов можно использовать для создания итератора, пригодного для многократного использования с различными наборами данных.
Возвращаемый итератор не привязан к какому-либо конкретному набору данных и не имеет initializer. Для инициализации итератора выполните операцию, возвращаемую Iterator.make_initializer(dataset).
Следующий пример:
iterator = Iterator.from_structure(tf.int64, tf.TensorShape([]))
dataset_range = Dataset.range(10)
range_initializer = iterator.make_initializer(dataset_range)
dataset_evens = dataset_range.filter(lambda x: x % 2 == 0)
evens_initializer = iterator.make_initializer(dataset_evens)
# Define a model based on the iterator; in this example, the model_fn
# is expected to take scalar tf.int64 Tensors as input (see
# the definition of 'iterator' above).
prediction, loss = model_fn(iterator.get_next())
# Train for `num_epochs`, where for each epoch, we first iterate over
# dataset_range, and then iterate over dataset_evens.
for _ in range(num_epochs):
# Initialize the iterator to `dataset_range`
sess.run(range_initializer)
while True:
try:
pred, loss_val = sess.run([prediction, loss])
except tf.errors.OutOfRangeError:
break
# Initialize the iterator to `dataset_evens`
sess.run(evens_initializer)
while True:
try:
pred, loss_val = sess.run([prediction, loss])
except tf.errors.OutOfRangeError:
break
| Аргументы | |
|---|---|
output_types | (Вложенная) структура объектов tf.DType, соответствующих каждому компоненту элемента этого набора данных. |
output_shapes | (Необязательно.) (Вложенная) структура объектов tf.TensorShape, соответствующих каждому компоненту элемента этого набора данных. Если опущено, форма каждого компонента не ограничена. |
shared_name | (Необязательно.) Если не пусто, этот итератор будет совместно использоваться под данным именем во множестве сессий, которые используют одни и те же устройства (например, при использовании удалённого сервера). |
output_classes | (Необязательно.) (Вложенная) структура объектов Python type, соответствующих каждому компоненту элемента этого итератора. Если опущено, каждый компонент предполагается типа tf.Tensor. |
| Возвращаемое значение | |
|---|---|
Iterator. |
| Исключения | |
|---|---|
TypeError | Если структуры output_shapes и output_types не совпадают. |
get_next
get_next(
name=None
)
Возвращает следующий элемент.
В режиме графа вы обычно должны вызывать этот метод один раз и использовать результат в качестве входных данных для другого вычисления. Затем типичный цикл вызовет tf.Session.run по результату этого вычисления. Цикл завершится, когда операция Iterator.get_next() поднимет tf.errors.OutOfRangeError. Следующий шаблон показывает, как использовать этот метод при построении цикла обучения:
dataset = ... # A `tf.data.Dataset` object.
iterator = dataset.make_initializable_iterator()
next_element = iterator.get_next()
# Build a TensorFlow graph that does something with each element.
loss = model_function(next_element)
optimizer = ... # A `tf.compat.v1.train.Optimizer` object.
train_op = optimizer.minimize(loss)
with tf.compat.v1.Session() as sess:
try:
while True:
sess.run(train_op)
except tf.errors.OutOfRangeError:
pass
Примечание: Допустимо вызыватьIterator.get_next()несколько раз, например, когда вы распределяете разные элементы по нескольким устройствам на одном шаге. Однако, распространённая ошибка возникает, когда пользователи вызываютIterator.get_next()в каждой итерации цикла обучения.Iterator.get_next()добавляет операции в граф, и выполнение каждой операции выделяет ресурсы (включая потоки); в результате вызов в каждой итерации цикла обучения приводит к замедлению и, в конечном итоге, к истощению ресурсов. Чтобы избежать этого, мы выводим предупреждение, когда количество вызовов превышает фиксированный порог подозрительности.
| Аргументы | |
|---|---|
name | (Необязательно.) Имя создаваемой операции. |
| Возвращаемое значение | |
|---|---|
(Вложенная) структура значений, соответствующих tf.data.Iterator.element_spec. |
get_next_as_optional
get_next_as_optional()
make_initializer
make_initializer(
dataset, name=None
)
Возвращает tf.Operation, которая инициализирует этот итератор на dataset.
| Аргументы | |
|---|---|
dataset | Dataset, чья element_spec совместима с этим итератором. |
name | (Необязательно.) Имя создаваемой операции. |
| Возвращаемое значение | |
|---|---|
tf.Operation, которую можно выполнить для инициализации этого итератора на заданном dataset. |
| Исключения | |
|---|---|
TypeError | Если dataset и этот итератор не имеют совместимой element_spec. |
string_handle
string_handle(
name=None
)
Возвращает строковый tf.Tensor, представляющий этот итератор.
| Аргументы | |
|---|---|
name | (Необязательно.) Имя создаваемой операции. |
| Возвращаемое значение | |
|---|---|
Скалярный tf.Tensor типа tf.string. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/compat/v1/data/Iterator