Spec-Zone.ru › TensorFlow 2.4

tf.compat.v1.make_template

Для произвольной функции создайте обёртку, которая обеспечит совместное использование переменных.

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

Это обёртка 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.
Args
name_ Имя области, созданной этим шаблоном. При необходимости, имя будет сделано уникальным путём добавления _N к имени.
func_ Функция, которая должна быть обернута.
create_scope_now_ Логический параметр, управляющий тем, должна ли область создаваться при построении шаблона или при вызове шаблона. По умолчанию False, что означает, что область создаётся при вызове шаблона.
unique_name_ При использовании, переопределяет имя name_ и не делает его уникальным. Если шаблон с той же областью/уникальным именем уже существует и повторное использование выключено, то возникает ошибка. По умолчанию None.
custom_getter_ Необязательный пользовательский getter для переменных, используемых в func_. См. документацию tf.compat.v1.get_variable custom_getter для получения дополнительной информации.
**kwargs Аргументы ключевых слов, которые нужно применить к func_.
Returns
Функция для инкапсуляции набора переменных, которые должны быть созданы один раз и повторно использованы. Охватывающая область будет создана либо при вызове make_template, либо при вызове результата, в зависимости от значения create_scope_now_. Независимо от значения, при первом вызове шаблона он войдёт в область без повторного использования и вызовет func_ для создания переменных, которые гарантированно будут уникальными. Все последующие вызовы повторно войдут в область и повторно используют эти переменные.
Raises
ValueError если name_ равно None.

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

Spec-Zone.ru

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