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 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