Spec-Zone.ru › TensorFlow

tf.compat.v1.make_template

Оборачивает произвольную функцию так, чтобы она совместно использовала переменные.

tf.compat.v1.make_template(
    name_,
    func_,
    create_scope_now_=False,
    unique_name_=None,
    custom_getter_=None,
    **kwargs
)

Переход на TF2

Внимание: Этот API разработан для TensorFlow v1. Продолжайте чтение, чтобы узнать, как перейти с этого API на соответствующий встроенный API TensorFlow v2. Инструкции по переносу остального кода см. в руководстве по переходу с TensorFlow v1 на TensorFlow v2.

tf.compat.v1.make_template — устаревший API, совместимый только с включённым eager execution и tf.function, если объединить его с tf.compat.v1.keras.utils.track_tf1_style_variables. Подробнее см. раздел руководства по переносу сопоставления моделей, посвящённый make_template:

https://www.tensorflow.org/guide/migrate/model_mapping#using_tfcompatv1make_template_in_the_decorated_method

Даже если вы используете устаревшие API для повторного использования переменных на основе variable_scope, рекомендуем напрямую использовать tf.compat.v1.keras.utils.track_tf1_style_variables, а не tf.compat.v1.make_template, поскольку он проще и предсказуемее взаимодействует с eager execution, чем make_template.

В подходе API TF2 переменные отслеживаются с помощью tf.Modules, слоёв и моделей Keras, а не с опорой на make_template.

Описание

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

Используется в руководстве Используется в учебных материалах
  • Использование моделей TF1.x в рабочих процессах TF2
  • Регрессия со смешанными линейными эффектами в {TF Probability, R, Stan}

Эта функция оборачивает func_ в шаблон и частично вычисляет его. Шаблоны — это функции, которые создают переменные при первом вызове и повторно используют их при последующих вызовах. Чтобы func_ был совместим с Template, он должен удовлетворять следующим условиям:

  • Функция должна создавать все обучаемые переменные и любые переменные, которые нужно повторно использовать, вызывая tf.compat.v1.get_variable. Если обучаемая переменная создаётся с помощью tf.Variable, будет вызвана ошибка ValueError. Переменные, предназначенные для локального использования, можно создавать, указав tf.Variable(..., trainable=false).
  • Функция может использовать области видимости переменных и другие шаблоны для внутреннего создания и повторного использования переменных, но не должна использовать tf.compat.v1.global_variables для захвата переменных, определённых вне области видимости функции.
  • Внутренние области видимости и имена переменных не должны зависеть от аргументов, не переданных в make_template. Как правило, при ошибке будет вызвана ошибка ValueError с сообщением о попытке повторно использовать несуществующую переменную.

В следующем примере и z, и w будут масштабированы с помощью одного и того же y. Важно отметить: если бы мы не присвоили scalar_name и использовали разные имена для z и w, была бы вызвана ошибка ValueError, поскольку переменную нельзя было бы повторно использовать.

def my_op(x, scalar_name):
  var1 = tf.compat.v1.get_variable(scalar_name,
                         shape=[],
                         initializer=tf.compat.v1.constant_initializer(1))
  return x * var1

scale_by_y = tf.compat.v1.make_template('scale_by_y', my_op, scalar_name='y')

z = scale_by_y(input1)
w = scale_by_y(input2)

В качестве меры предосторожности возвращённая функция после первого вызова вызовет ошибку ValueError, если обучаемые переменные создаются вызовом tf.Variable.

Если все эти условия выполнены, шаблон обеспечивает соблюдение двух свойств:

  1. При многократном вызове одного и того же шаблона все нелокальные переменные будут совместно использоваться.
  2. Два разных шаблона гарантированно будут уникальными, если только вы не войдёте повторно в ту же область видимости переменных, что и при первоначальном определении шаблона, и не определите его заново. Пример такого исключения:
def my_op(x, scalar_name):
  var1 = tf.compat.v1.get_variable(scalar_name,
                         shape=[],
                         initializer=tf.compat.v1.constant_initializer(1))
  return x * var1

with tf.compat.v1.variable_scope('scope') as vs:
  scale_by_y = tf.compat.v1.make_template('scale_by_y', my_op,
  scalar_name='y')
  z = scale_by_y(input1)
  w = scale_by_y(input2)

# Creates a template that reuses the variables above.
with tf.compat.v1.variable_scope(vs, reuse=True):
  scale_by_y2 = tf.compat.v1.make_template('scale_by_y', my_op,
  scalar_name='y')
  z2 = scale_by_y2(input1)
  w2 = scale_by_y2(input2)

В зависимости от значения create_scope_now_ полная область видимости переменных может быть захвачена либо при первом вызове, либо при создании. Если для этого параметра задано значение True, у всех тензоров, созданных повторными вызовами шаблона, в конце имени будет добавлено _N+1, поскольку при первом входе в область видимости в конструкторе Template тензоры не создаются.

Примечание: name_, func_ и create_scope_now_ заканчиваются символом подчёркивания, чтобы снизить вероятность конфликтов с kwargs.
Аргументы
name_ Имя области видимости, создаваемой этим шаблоном. При необходимости имя будет сделано уникальным путём добавления _N.
func_ Функция, которую нужно обернуть.
create_scope_now_ Логическое значение, определяющее, следует ли создавать область видимости при создании шаблона или при его вызове. Значение по умолчанию — False: область видимости создаётся при вызове шаблона.
unique_name_ Если указано, переопределяет name_ и не становится уникальным. Если шаблон с такой же областью видимости/unique_name уже существует, а reuse имеет значение false, возникает ошибка. По умолчанию — None.
custom_getter_ Необязательный пользовательский метод получения переменных, используемых в func_. Дополнительные сведения см. в документации tf.compat.v1.get_variable custom_getter.
**kwargs Именованные аргументы, передаваемые в func_.
Возвращает
Функцию для инкапсуляции набора переменных, которые следует создать один раз и повторно использовать. Внешняя область видимости будет создана либо при вызове make_template, либо при вызове результата — в зависимости от значения create_scope_now_. Независимо от этого значения, при первом вызове шаблона он войдёт в область видимости без повторного использования и вызовет func_ для создания переменных, уникальность которых гарантирована. При всех последующих вызовах он повторно войдёт в область видимости и повторно использует эти переменные.
Вызывает исключения
ValueError если name_ равно None.

© 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/compat/v1/make_template

Spec-Zone.ru

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