Spec-Zone.ru › TensorFlow

tf.scan

выполняет сканирование списка тензоров, распакованных из elems по измерению 0. (устаревшие значения аргументов)

tf.scan(
    fn,
    elems,
    initializer=None,
    parallel_iterations=10,
    back_prop=True,
    swap_memory=False,
    infer_shape=True,
    reverse=False,
    name=None
)
Устарело: НЕКОТОРЫЕ ЗНАЧЕНИЯ АРГУМЕНТОВ УСТАРЕЛИ: (back_prop=False). Они будут удалены в будущей версии. Инструкции по обновлению: back_prop=False устарел. Рассмотрите возможность использования tf.stop_gradient. Вместо: results = tf.scan(fn, elems, back_prop=False) Используйте: results = tf.nest.map_structure(tf.stop_gradient, tf.scan(fn, elems))

В простейшей версии scan многократно применяет вызываемый объект fn к последовательности элементов от первого до последнего. Элементы состоят из тензоров, распакованных из elems по измерению 0. Вызываемый объект fn принимает два тензора в качестве аргументов. Первый аргумент — накопленное значение, вычисленное при предыдущем вызове fn, а второй — значение в текущей позиции elems. Если initializer равен None, elems должен содержать хотя бы один элемент, и его первый элемент используется в качестве начального значения.

Предположим, что elems распаковывается в values — список тензоров. Форма результирующего тензора — [len(values)] + fn(initializer, values[0]).shape. Если reverse=True, его форма — fn(initializer, values[-1]).shape.

Этот метод также поддерживает elems и аккумулятор с несколькими аргументами. Если elems — список или кортеж тензоров (возможно, вложенный), то каждый из этих тензоров должен иметь одинаковое первое измерение (измерение распаковки). Второй аргумент fn должен соответствовать структуре elems.

Если initializer не задан, предполагается, что структура результата и типы данных fn совпадают с входными; в этом случае первый аргумент fn должен соответствовать структуре elems.

Если задан initializer, структура результата fn должна совпадать со структурой initializer; первый аргумент fn должен соответствовать этой структуре.

Например, если elems — это (t1, [t2, t3]), а initializer — это [i1, i2], то подходящая сигнатура для fn в python2 будет такой: fn = lambda (acc_p1, acc_p2), (t1, [t2, t3]):, а fn должен возвращать список, [acc_n1, acc_n2]. Альтернативная корректная сигнатура для fn, работающая в python3: fn = lambda a, t:, где a и t соответствуют входным кортежам.

Аргументы
fn Вызываемый объект, который необходимо выполнить. Он принимает два аргумента. Первый будет иметь ту же структуру, что и initializer, если он задан, а в противном случае — ту же структуру, что и elems. Второй будет иметь ту же (возможно, вложенную) структуру, что и elems. Результат должен иметь ту же структуру, что и initializer, если он задан, а в противном случае — ту же структуру, что и elems.
elems Тензор или последовательность тензоров (возможно, вложенная), каждый из которых будет распакован по первому измерению. Вложенная последовательность полученных срезов будет первым аргументом для fn.
initializer (необязательно) Тензор или последовательность тензоров (возможно, вложенная), начальное значение аккумулятора и ожидаемый тип результата fn.
parallel_iterations (необязательно) Число итераций, которые разрешено выполнять параллельно.
back_prop (необязательно) Устарело. Значение False отключает поддержку обратного распространения. Вместо этого рекомендуется использовать tf.stop_gradient.
swap_memory (необязательно) Значение True включает обмен памятью между GPU и CPU.
infer_shape (необязательно) Значение False отключает проверку согласованности форм выходных данных.
reverse (необязательно) Значение True выполняет сканирование тензора от последнего элемента к первому (вместо от первого к последнему).
name (необязательно) Префикс имени для возвращаемых тензоров.
Возвращает
Тензор или последовательность тензоров (возможно, вложенная). Каждый тензор содержит результаты применения fn к тензорам, распакованным из elems по первому измерению, и к предыдущим значениям аккумулятора — от первого к последнему (или от последнего к первому, если задано reverse=True).
Вызывает исключения
TypeError если fn не является вызываемым объектом или структуры результата fn и initializer не совпадают.
ValueError если длины результатов fn и initializer не совпадают.
Примеры
elems = np.array([1, 2, 3, 4, 5, 6])
sum = scan(lambda a, x: a + x, elems)
# sum == [1, 3, 6, 10, 15, 21]
sum = scan(lambda a, x: a + x, elems, reverse=True)
# sum == [21, 20, 18, 15, 11, 6]
elems = np.array([1, 2, 3, 4, 5, 6])
initializer = np.array(0)
sum_one = scan(
    lambda a, x: x[0] - x[1] + a, (elems + 1, elems), initializer)
# sum_one == [1, 2, 3, 4, 5, 6]
elems = np.array([1, 0, 0, 0, 0, 0])
initializer = (np.array(0), np.array(1))
fibonaccis = scan(lambda a, _: (a[1], a[0] + a[1]), elems, initializer)
# fibonaccis == ([1, 1, 2, 3, 5, 8], [1, 2, 3, 5, 8, 13])

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

Spec-Zone.ru

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