Spec-Zone.ru › TensorFlow

tf.compat.v1.get_local_variable

Возвращает существующую локальную переменную или создает новую.

tf.compat.v1.get_local_variable(
    name,
    shape=None,
    dtype=None,
    initializer=None,
    regularizer=None,
    trainable=False,
    collections=None,
    caching_device=None,
    partitioner=None,
    validate_shape=True,
    use_resource=None,
    custom_getter=None,
    constraint=None,
    synchronization=tf.VariableSynchronization.AUTO,
    aggregation=tf.compat.v1.VariableAggregation.NONE
)

Переход на TF2

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

Несмотря на то что это устаревший API compat.v1, tf.compat.v1.get_variable в основном совместим с eager execution и tf.function, но только при использовании вместе с декоратором tf.compat.v1.keras.utils.track_tf1_style_variables. (При этом функция будет вести себя так, как если бы для повторного использования всегда было задано значение AUTO_REUSE.)

Дополнительные сведения см. в руководстве по переносу моделей.

Если не использовать эту функцию вместе с tf.compat.v1.keras.utils.track_tf1_style_variables, get_variable будет создавать новую переменную при каждом вызове и никогда не будет повторно использовать переменные независимо от их имен или аргументов reuse.

Эквивалентом этого символа в TF2 будет tf.Variable, однако при использовании tf.Variable необходимо самостоятельно отслеживать переменные (и аргументы регуляризатора) либо с помощью механизмов tf.Module или tf.keras.layers.Layer.

Дополнительные сведения о постепенном переносе этих вариантов использования на tf.Variable приведены в разделе руководства по переносу.

Примечание: Аргумент partitioner несовместим с поведением TF2 даже при использовании tf.compat.v1.keras.utils.track_tf1_style_variables. Его можно заменить с помощью ParameterServerStrategy и соответствующих функций разбиения. Дополнительные сведения см. в руководстве по переходу на несколько GPU и руководствах по ParameterServerStrategy, на которые в нем даны ссылки.

Описание

Поведение такое же, как у get_variable, за исключением того, что переменные добавляются в коллекцию LOCAL_VARIABLES, а для trainable задается значение False. Эта функция добавляет к имени префикс текущей области видимости переменных и проверяет возможность повторного использования. Подробное описание повторного использования см. в руководстве по области видимости переменных. Вот простой пример:

def foo():
  with tf.variable_scope("foo", reuse=tf.AUTO_REUSE):
    v = tf.get_variable("v", [1])
  return v

v1 = foo()  # Creates v.
v2 = foo()  # Gets the same, existing v.
assert v1 == v2

Если инициализатор — None (значение по умолчанию), будет использоваться инициализатор по умолчанию, заданный в области видимости переменных. Если и он равен None, будет использоваться glorot_uniform_initializer. Инициализатором также может быть Tensor; в этом случае переменная инициализируется этим значением и формой.

Аналогично, если регуляризатор — None (значение по умолчанию), будет использоваться регуляризатор по умолчанию, заданный в области видимости переменных (если и он равен None, регуляризация по умолчанию не выполняется).

Если указана функция разбиения, возвращается PartitionedVariable. При обращении к этому объекту как к Tensor фрагменты объединяются вдоль оси разбиения.

Доступны несколько полезных функций разбиения. См., например, variable_axis_size_partitioner и min_max_variable_partitioner.

Аргументы
name Имя новой или существующей переменной.
shape Форма новой или существующей переменной.
dtype Тип новой или существующей переменной (по умолчанию — DT_FLOAT).
initializer Инициализатор переменной, если она создается. Может быть объектом-инициализатором или Tensor. Если это Tensor, его форма должна быть известна, если только validate_shape не равно False.
regularizer Функция вида (Tensor -> Tensor или None); результат ее применения к вновь созданной переменной добавляется в коллекцию tf.GraphKeys.REGULARIZATION_LOSSES и может использоваться для регуляризации.
collections Список ключей коллекций графа, в которые нужно добавить Variable. По умолчанию используется [GraphKeys.LOCAL_VARIABLES] (см. tf.Variable).
caching_device Необязательная строка устройства или функция, указывающая, где следует кэшировать Variable для чтения. По умолчанию используется устройство Variable. Если значение не равно None, данные кэшируются на другом устройстве. Обычно данные кэшируют на устройстве, где находятся операции, использующие Variable, чтобы избежать повторного копирования через Switch и другие условные операторы.
partitioner Необязательный вызываемый объект, принимающий полностью определенные TensorShape и dtype создаваемой Variable и возвращающий список разбиений для каждой оси (в настоящее время можно разбить только одну ось).
validate_shape Если значение равно False, переменную можно инициализировать значением с неизвестной формой. Если значение равно True (по умолчанию), форма initial_value должна быть известна. Для этого параметра в качестве инициализатора необходимо использовать Tensor, а не объект-инициализатор.
use_resource Если значение равно False, создается обычная Variable. Если значение равно True, вместо нее создается экспериментальная ResourceVariable с четко определенной семантикой. По умолчанию используется False (в дальнейшем значение по умолчанию изменится на True). При включенном eager execution для этого аргумента всегда устанавливается значение True.
custom_getter Вызываемый объект, который принимает истинный геттер в качестве первого аргумента и позволяет переопределить внутренний метод get_variable. Сигнатура custom_getter должна соответствовать сигнатуре этого метода, однако вариант, наиболее устойчивый к будущим изменениям, допускает изменения: def custom_getter(getter, *args, **kwargs). Также разрешен прямой доступ ко всем параметрам get_variable: def custom_getter(getter, name, *args, **kwargs). Простой пользовательский геттер, который просто создает переменные с измененными именами:
def custom_getter(getter, name, *args, **kwargs):
  return getter(name + '_suffix', *args, **kwargs)
constraint Необязательная функция проекции, применяемая к переменной после ее обновления с помощью Optimizer (например, для реализации ограничений нормы или значения весов слоя). Функция должна принимать на вход непроецированный Tensor, представляющий значение переменной, и возвращать Tensor проецированного значения (который должен иметь ту же форму). Ограничения небезопасно использовать при асинхронном распределенном обучении.
synchronization Указывает, когда будет выполняться агрегация распределенной переменной. Допустимые значения — константы, определенные в классе tf.VariableSynchronization. По умолчанию для синхронизации задается значение AUTO, а текущий DistributionStrategy определяет, когда выполнять синхронизацию.
aggregation Указывает, как будет выполняться агрегация распределенной переменной. Допустимые значения — константы, определенные в классе tf.VariableAggregation.
Возвращает
Созданный или существующий Variable (или PartitionedVariable, если использовалась функция разбиения).
Вызывает исключения
ValueError при создании новой переменной, если ее форма не объявлена; при нарушении правил повторного использования во время создания переменной; или если initializer и dtype не совпадают. Повторное использование задается внутри variable_scope.

© 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/get_local_variable

Spec-Zone.ru

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