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 к эквиваленту в native TensorFlow v2. Обратитесь к руководству по миграции TensorFlow v1 в TensorFlow v2 https://www.tensorflow.org/guide/migrate за инструкциями по миграции остальной части вашего кода.

tf.compat.v1.make_template — это устаревший API, который совместим только с включённым выполнением eager и 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-выполнением проще и предсказуемее, чем make_template.

Подход API TF2 заключался бы в отслеживании ваших переменных с помощью tf.Module или слоёв и моделей 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.

Если всё это верно, то шаблон навязывает 2 свойства:

  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 к своему имени, поскольку при первом входе в область в конструкторе шаблона тензоры не создаются.

Примечание: name_, func_ и create_scope_now_ имеют заключительный символ подчёркивания, чтобы уменьшить вероятность столкновений с kwargs.
Аргументы
name_ Имя области, созданной этим шаблоном. При необходимости имя будет сделано уникальным путём добавления _N к имени.
func_ Функция, которую нужно обернуть.
create_scope_now_ Логическое значение, определяющее, должна ли область создаваться при построении шаблона или при вызове шаблона. По умолчанию значение False, что означает, что область создаётся при вызове шаблона.
unique_name_ При использовании переопределяет name_ и не делает его уникальным. Если шаблон с той же областью/уникальным именем уже существует и повторное использование выключено, возникает ошибка. По умолчанию 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