Spec-Zone.ru › TensorFlow 1.15

tf.make_template

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

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

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

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

tf.compat.v1.make_template

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

Spec-Zone.ru

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