Spec-Zone.ru › TensorFlow

tf.TensorArray

Класс, оборачивающий тензорные массивы динамического размера для каждого временного шага.

Показать псевдонимы

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

Подробнее см. в руководстве по миграции.

tf.compat.v1.TensorArray

tf.TensorArray(
    dtype,
    size=None,
    dynamic_size=None,
    clear_after_read=None,
    tensor_array_name=None,
    handle=None,
    flow=None,
    infer_shape=True,
    element_shape=None,
    colocate_with_first_write_call=True,
    name=None
)

Используется в блокнотах

Используется в руководстве Используется в учебных материалах
  • Эффективное использование TensorFlow 2
  • Повышение производительности с помощью tf.function
  • Игра в CartPole с помощью метода Actor-Critic
  • Моделирование распространения COVID-19 в Европе и влияния принимаемых мер
  • Нейронный машинный перевод с механизмом внимания
  • Нейронный машинный перевод с Transformer и Keras

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

Обратите внимание: хотя массив можно считывать несколько раз, а значения в позициях можно перезаписывать, поведение может быть неопределенным, если сохранять несколько ссылок на один и тот же массив и clear_after_read имеет значение False. В частности, не используйте такие методы, как concat(), чтобы преобразовать промежуточный TensorArray в тензор, а затем продолжить изменять TensorArray, особенно если впоследствии необходимо выполнить обратное распространение через него.

Пример 1: обычное чтение и запись.

ta = tf.TensorArray(tf.float32, size=0, dynamic_size=True, clear_after_read=False)
ta = ta.write(0, 10)
ta = ta.write(1, 20)
ta = ta.write(2, 30)

ta.read(0)
<tf.Tensor: shape=(), dtype=float32, numpy=10.0>
ta.read(1)
<tf.Tensor: shape=(), dtype=float32, numpy=20.0>
ta.read(2)
<tf.Tensor: shape=(), dtype=float32, numpy=30.0>
ta.stack()
<tf.Tensor: shape=(3,), dtype=float32, numpy=array([10., 20., 30.],
dtype=float32)>

Пример 2: алгоритм вычисления последовательности Фибоначчи, который записывает значения в цикле, а затем возвращает результат.

@tf.function
def fibonacci(n):
  ta = tf.TensorArray(tf.float32, size=0, dynamic_size=True)
  ta = ta.unstack([0., 1.])

  for i in range(2, n):
    ta = ta.write(i, ta.read(i - 1) + ta.read(i - 2))

  return ta.stack()

fibonacci(7)
<tf.Tensor: shape=(7,), dtype=float32,
numpy=array([0., 1., 1., 2., 3., 5., 8.], dtype=float32)>

Пример 3: простой цикл, взаимодействующий с tf.Variable.

v = tf.Variable(1)
@tf.function
def f(x):
  ta = tf.TensorArray(tf.int32, size=0, dynamic_size=True)
  for i in tf.range(x):
    v.assign_add(i)
    ta = ta.write(i, v)
  return ta.stack()
f(5)
<tf.Tensor: shape=(5,), dtype=int32, numpy=array([ 1,  2,  4,  7, 11],
dtype=int32)>
Аргументы
dtype (обязательно) тип данных TensorArray.
size (необязательно) скаляр int32 Tensor: размер TensorArray. Обязателен, если handle не указан.
dynamic_size (необязательно) логическое значение Python: если True, операции записи могут увеличить размер TensorArray сверх исходного. Значение по умолчанию: False.
clear_after_read Логическое значение (необязательно, по умолчанию: True). Если True, значения TensorArray удаляются после чтения. Это отключает возможность многократного чтения, но позволяет раньше освободить память.
tensor_array_name (необязательно) строка Python: имя TensorArray. Используется при создании дескриптора TensorArray. Если задано это значение, handle должен быть None.
handle (необязательно) дескриптор Tensor существующего TensorArray. Если задано это значение, tensor_array_name должен быть None. Поддерживается только в режиме графа.
flow (необязательно) скаляр float Tensor из существующего TensorArray.flow. Поддерживается только в режиме графа.
infer_shape (необязательно, по умолчанию: True) Если True, включен вывод формы. В этом случае все элементы должны иметь одинаковую форму.
element_shape (необязательно, по умолчанию: None) объект TensorShape, задающий ограничения на форму каждого элемента TensorArray. Форма может быть задана не полностью.
colocate_with_first_write_call Если True, TensorArray будет размещен на том же устройстве, что и тензор, использованный при первой записи (к операциям записи относятся write, unstack и split). Если False, TensorArray будет размещен на устройстве, определяемом контекстом устройства, доступным во время его инициализации.
name Имя операции (необязательно).
Вызывает исключения
ValueError если указаны и handle, и tensor_array_name.
TypeError если handle указан, но не является тензором.
Атрибуты
dtype Тип данных этого TensorArray.
dynamic_size Логическое значение Python; если True, размер TensorArray может динамически увеличиваться.
element_shape tf.TensorShape элементов этого TensorArray.
flow Поток Tensor, обеспечивающий выполнение операций, ведущих к этому состоянию TensorArray.
handle Ссылка на TensorArray.

Методы

close

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

close(
    name=None
)

Закрывает текущий TensorArray.

Примечание: Результат этой функции необходимо использовать. Если этого не сделать, будет записано предупреждение или может возникнуть ошибка. Чтобы пометить результат как использованный, вызовите его метод .mark_used().

concat

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

concat(
    name=None
)

Возвращает значения TensorArray в виде объединенного Tensor.

Все значения должны быть записаны; их ранги должны совпадать, а формы — совпадать по всем измерениям, кроме первого.

Аргументы
name Имя операции (необязательно).
Возвращает
Все тензоры TensorArray, объединенные в один тензор.

gather

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

gather(
    indices, name=None
)

Возвращает выбранные значения TensorArray в виде упакованного Tensor.

Все выбранные значения должны быть записаны и иметь одинаковые формы.

Аргументы
indices 1-D Tensor со значениями из [0, max_value). Если TensorArray не является динамическим, max_value=size().
name Имя операции (необязательно).
Возвращает
Тензоры в TensorArray, выбранные с помощью indices и упакованные в один тензор.

grad

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

grad(
    source, flow=None, name=None
)

identity

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

identity()

Возвращает TensorArray с теми же содержимым и свойствами.

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

read

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

read(
    index, name=None
)

Считывает значение из позиции index в TensorArray.

Аргументы
index Тензор int32 нулевого ранга с индексом для чтения.
name Имя операции (необязательно).
Возвращает
Тензор с индексом index.

scatter

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

scatter(
    indices, value, name=None
)

Распределяет значения Tensor по указанным индексам TensorArray.

Аргументы
indices 1-D Tensor со значениями из [0, max_value). Если TensorArray не является динамическим, max_value=size().
value Тензор ранга N+1 типа dtype. Тензор для распаковки.
name Имя операции (необязательно).
Возвращает
Новый объект TensorArray с потоком, гарантирующим выполнение операции распределения. Используйте этот объект для всех последующих операций.
Вызывает исключения
ValueError если не удается вывести форму.
Примечание: Результат этой функции необходимо использовать. Если этого не сделать, будет записано предупреждение или может возникнуть ошибка. Чтобы пометить результат как использованный, вызовите его метод .mark_used().

size

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

size(
    name=None
)

Возвращает размер TensorArray.

split

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

split(
    value, lengths, name=None
)

Разбивает значения Tensor и помещает их в TensorArray.

Аргументы
value Тензор ранга N+1 типа dtype. Тензор для разбиения.
lengths Вектор int32 ранга 1 с длинами, используемыми при разбиении value по первому измерению.
name Имя операции (необязательно).
Возвращает
Новый объект TensorArray с потоком, гарантирующим выполнение операции разбиения. Используйте этот объект для всех последующих операций.
Вызывает исключения
ValueError если не удается вывести форму.
Примечание: Результат этой функции необходимо использовать. Если этого не сделать, будет записано предупреждение или может возникнуть ошибка. Чтобы пометить результат как использованный, вызовите его метод .mark_used().

stack

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

stack(
    name=None
)

Возвращает значения TensorArray в виде объединенного в стек Tensor.

Все значения должны быть записаны и иметь одинаковые формы. Если ранг входных форм равен R, ранг выходной формы будет равен (R+1).

Например:

ta = tf.TensorArray(tf.int32, size=3)
ta = ta.write(0, tf.constant([1, 2]))
ta = ta.write(1, tf.constant([3, 4]))
ta = ta.write(2, tf.constant([5, 6]))
ta.stack()
<tf.Tensor: shape=(3, 2), dtype=int32, numpy=
array([[1, 2],
       [3, 4],
       [5, 6]], dtype=int32)>
Аргументы
name Имя операции (необязательно).
Возвращает
Все тензоры TensorArray, объединенные в стек и помещенные в один тензор.

unstack

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

unstack(
    value, name=None
)

Разбирает значения Tensor на отдельные элементы в TensorArray.

Если ранг форм входных значений равен R, элементы выходного TensorArray будут иметь формы ранга (R-1).

Аргументы
value Тензор ранга N+1 типа dtype. Тензор для разделения на элементы.
name Имя операции (необязательно).
Возвращает
Новый объект TensorArray с потоком, гарантирующим выполнение операции разбиения на элементы. Используйте этот объект для всех последующих операций.
Вызывает исключения
ValueError если не удается вывести форму.
Примечание: Результат этой функции необходимо использовать. Если этого не сделать, будет записано предупреждение или может возникнуть ошибка. Чтобы пометить результат как использованный, вызовите его метод .mark_used().

write

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

write(
    index, value, name=None
)

Записывает value в позицию index TensorArray.

Аргументы
index Скаляр int32 нулевого ранга с индексом для записи.
value Тензор N-го ранга типа dtype. Тензор для записи в эту позицию.
name Имя операции (необязательно).
Возвращает
Новый объект TensorArray с потоком, гарантирующим выполнение операции записи. Используйте этот объект для всех последующих операций.
Вызывает исключения
ValueError если записывающих элементов больше, чем указано.
Примечание: Результат этой функции необходимо использовать. Если этого не сделать, будет записано предупреждение или может возникнуть ошибка. Чтобы пометить результат как использованный, вызовите его метод .mark_used().

© 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/TensorArray

Spec-Zone.ru

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