Spec-Zone.ru › TensorFlow 2.3

tf.vectorized_map

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

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

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

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

См. Руководство по миграции для получения дополнительных сведений.

tf.compat.v1.vectorized_map

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

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

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

  • Не должно быть зависимости данных между различными семантическими вызовами fn, т.е. элементы входных данных можно сопоставлять в произвольном порядке.
  • Состоятельные ядра в основном не поддерживаются, поскольку они часто подразумевают зависимость данных. Тем не менее, мы поддерживаем ограниченный набор таких состоятельных ядер (например, RandomFoo, операции с переменными, такие как чтение и т. д.).
  • 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.
fallback_to_while_loop Если True, при невозможности векторизации операции, недопустимая операция оборачивается в tf.while_loop для выполнения итераций отображения. Обратите внимание, что этот возврат происходит только для неподдерживаемых операций, а другие части fn всё ещё векторизуются. Если False, при обнаружении неподдерживаемой операции возникает исключение ValueError. Обратите внимание, что возврат может привести к замедлению, поскольку векторизация часто приводит к ускорению на один-два порядка величины.
Возвращаемые значения
Тензор или (возможно, вложенная) последовательность тензоров. Каждый тензор упаковывает результаты применения fn к тензорам, распакованным из элементов по первой размерности, от первого до последнего.
Возможные исключения
ValueError Если векторизация завершается неудачей, и fallback_to_while_loop равно False.

© 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/r2.3/api_docs/python/tf/vectorized_map

Spec-Zone.ru

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