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