Spec-Zone.ru › TensorFlow

tf.vectorized_map

Параллельное отображение списка тензоров, извлечённых из elems по измерению 0.

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

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

Дополнительные сведения см. в руководстве по миграции.

tf.compat.v1.vectorized_map

tf.vectorized_map(
    fn, elems, fallback_to_while_loop=True, warn=True
)

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

Используется в руководстве
  • API NumPy в TensorFlow

Этот метод работает аналогично tf.map_fn, но оптимизирован для значительно более быстрого выполнения, возможно, с гораздо большим потреблением памяти. Ускорение достигается за счёт векторизации (см. Автоматическая векторизация графов TensorFlow: якобианы, автоматическая пакетная обработка и не только). Векторизация позволяет семантически запускать все вызовы fn параллельно и объединять соответствующие операции в этих вызовах. Это объединение выполняется статически во время построения графа, и производительность сгенерированного кода часто близка к производительности версии, объединённой вручную.

Поскольку tf.vectorized_map полностью распараллеливает пакет, этот метод обычно значительно быстрее, чем использование tf.map_fn, особенно в режиме eager. Однако эта экспериментальная функция имеет ряд ограничений:

  • Между различными семантическими вызовами fn не должно быть зависимости по данным; другими словами, элементы входных данных можно безопасно обрабатывать в любом порядке.
  • Поддержка операций с состоянием может быть ограниченной, поскольку они часто предполагают наличие зависимости по данным. Тем не менее поддерживается ограниченный набор таких операций (например, RandomFoo и операции Variable, такие как чтение).
  • Поддержка операций управления потоком в fn ограничена.
  • fn должна возвращать вложенную структуру тензоров или операций. Однако если возвращается операция, у неё не должно быть выходных данных.
  • Форма и тип данных любых промежуточных тензоров или выходных тензоров при вычислении fn не должны зависеть от входных данных fn.

Примеры:

def outer_product(a):
  return tf.tensordot(a, a, 0)

batch_size = 100
a = tf.ones((batch_size, 32, 32))
c = tf.vectorized_map(outer_product, a)
assert c.shape == (batch_size, 32, 32, 32, 32)
# Computing per-example gradients

batch_size = 10
num_features = 32
layer = tf.keras.layers.Dense(1)

def model_fn(arg):
  with tf.GradientTape() as g:
    inp, label = arg
    inp = tf.expand_dims(inp, 0)
    label = tf.expand_dims(label, 0)
    prediction = layer(inp)
    loss = tf.nn.l2_loss(label - prediction)
  return g.gradient(loss, (layer.kernel, layer.bias))

inputs = tf.random.uniform([batch_size, num_features])
labels = tf.random.uniform([batch_size, 1])
per_example_gradients = tf.vectorized_map(model_fn, (inputs, labels))
assert per_example_gradients[0].shape == (batch_size, num_features, 1)
assert per_example_gradients[1].shape == (batch_size, 1)
Аргументы
fn Вызываемый объект. Он принимает один аргумент, структура которого (возможно, вложенная) совпадает со структурой elems, и возвращает (возможно, вложенную) структуру тензоров и операций, которая может отличаться от структуры elems.
elems Тензор или (возможно, вложенная) последовательность тензоров, каждый из которых будет разделён по первому измерению. Вложенная последовательность полученных срезов будет обработана с помощью fn. Первые измерения всех элементов должны транслироваться к согласованному значению; иначе говоря, первое измерение тензора каждого элемента должно быть равно либо B, либо 1 для некоторого общего размера пакета B >= 1.
fallback_to_while_loop Если значение равно true, при невозможности векторизовать операцию неподдерживаемая операция оборачивается в tf.while_loop для выполнения итераций отображения. Обратите внимание, что такой переход к запасному варианту выполняется только для неподдерживаемых операций, а остальные части fn по-прежнему векторизуются. Если значение равно false, при обнаружении неподдерживаемой операции возникает ValueError. Обратите внимание, что переход к запасному варианту может снизить производительность, поскольку векторизация часто ускоряет выполнение в десять–сто раз.
warn Если задано значение false, предупреждения о преобразовании операций в предоставленном fn с переходом к циклам while подавляются.
Возвращает
Тензор или (возможно, вложенная) последовательность тензоров. Каждый тензор содержит результаты применения fn к тензорам, извлечённым из elems по первому измерению, от первого элемента до последнего.

Хотя пользовательские входные и выходные данные такого типа встречаются реже, обратите внимание: тензоры типа tf.variant, представляющие списки тензоров (например, полученные из tf.raw_ops.TensorListFromTensor), векторизуются путём объединения элементов списка, а не самих variant-значений. Поэтому при возврате форма тензора-контейнера будет скалярной, а не обычной объединённой формой. Это повышает производительность векторизации градиентов для операций управления потоком.

Вызывает исключение
ValueError Если векторизация завершается с ошибкой и значение fallback_to_while_loop равно False.

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

Spec-Zone.ru

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