Spec-Zone.ru › TensorFlow 1.15

tf.vectorized_map

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

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

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

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

См. руководство по миграции для получения более подробной информации.

tf.compat.v1.vectorized_map, `tf.compat.v2.vectorized_map`

tf.vectorized_map(
    fn, elems
)

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

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

  • Не должно быть зависимости данных между различными семантическими вызовами fn, т. е. безопасно отображать элементы входных данных в любом порядке.
  • Состоятельные ядра в основном могут не поддерживаться, так как они часто подразумевают зависимость данных. Тем не менее, мы поддерживаем ограниченный набор таких состоятельных ядер (например, RandomFoo, операции с переменными, такие как чтение и т. д.).
  • fn имеет ограниченную поддержку операций управления потоком. tf.cond в частности, не поддерживается.
  • fn должно возвращать вложенную структуру тензоров или операций. Однако если возвращается операция, у неё должно быть ноль выходов.
  • Форма и тип данных любых промежуточных или выходных тензоров в вычислении fn не должны зависеть от входных данных для fn.
Аргументы
fn Выполняемая функция. Она принимает один аргумент, который будет иметь ту же (возможно, вложенную) структуру, что и elems, и возвращает (возможно, вложенную) структуру тензоров и операций, которая может отличаться от структуры elems.
elems Тензор или (возможно, вложенная) последовательность тензоров, каждый из которых будет распакован по первому измерению. Вложенная последовательность полученных срезов будет отображаться функцией 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)

© 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/r1.15/api_docs/python/tf/vectorized_map

Spec-Zone.ru

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