tf.compat.v1.get_variable
Получает существующую переменную с указанными параметрами или создает новую.
tf.compat.v1.get_variable(
name,
shape=None,
dtype=None,
initializer=None,
regularizer=None,
trainable=None,
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. (При этом поведение будет таким, как если бы для reuse всегда было задано значение AUTO_REUSE.)
Дополнительную информацию см. в руководстве по переносу моделей.
Если не использовать tf.compat.v1.keras.utils.track_tf1_style_variables, get_variable будет каждый раз создавать новую переменную и никогда не использовать повторно существующие переменные, независимо от имен переменных или аргументов reuse.
Эквивалентом этого символа в TF2 будет tf.Variable, но при использовании tf.Variable необходимо отслеживать переменные (и аргументы regularizer) вручную или с помощью механизмов tf.Module либо tf.keras.layers.Layer.
В разделе руководства по переносу также приведены дополнительные сведения о постепенном переходе от этих вариантов использования к tf.Variable.
Примечание: Аргументpartitionerнесовместим с поведением TF2 даже при использованииtf.compat.v1.keras.utils.track_tf1_style_variables. Вместо него можно использоватьParameterServerStrategyи его разделители. Дополнительную информацию см. в руководстве по переходу на много-GPU и руководствах по ParameterServerStrategy, на которые в нем даны ссылки.
Описание
Используется в блокнотах
| Используется в руководстве | Используется в учебных материалах |
|---|---|
Эта функция добавляет к имени текущую область видимости переменной и проверяет возможность повторного использования. Подробное описание повторного использования см. в руководстве по областям видимости переменных. Простой пример:
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 (значение по умолчанию), будет использоваться initializer по умолчанию, заданный в области видимости переменной. Если и он равен None, будет использован glorot_uniform_initializer. В качестве initializer также можно указать Tensor; в этом случае переменная инициализируется этим значением и формой.
Аналогично, если regularizer равен None (значение по умолчанию), будет использоваться regularizer по умолчанию, заданный в области видимости переменной (если и он равен None, регуляризация по умолчанию не выполняется).
Если задан partitioner, возвращается PartitionedVariable. При обращении к этому объекту как к Tensor его фрагменты объединяются вдоль оси разбиения.
Доступны несколько полезных partitioner. См., например, 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 и может использоваться для регуляризации. |
trainable | Если True, также добавить переменную в коллекцию графа GraphKeys.TRAINABLE_VARIABLES (см. tf.Variable). |
collections | Список ключей коллекций графа, в которые нужно добавить Variable. По умолчанию [GraphKeys.GLOBAL_VARIABLES] (см. tf.Variable). |
caching_device | Необязательная строка устройства или функция, определяющая, где следует кэшировать Variable для чтения. По умолчанию используется устройство Variable. Если значение не None, кэширование выполняется на другом устройстве. Обычно кэш размещают на устройстве, где находятся Ops, использующие Variable, чтобы избежать повторного копирования через Switch и другие условные операторы. |
partitioner | Необязательный вызываемый объект, принимающий полностью заданные TensorShape и dtype создаваемой Variable и возвращающий список разделов для каждой оси (в настоящее время разделять можно только по одной оси). |
validate_shape | Если значение False, переменную можно инициализировать значением с неизвестной формой. Если значение True (по умолчанию), форма initial_value должна быть известна. Для этого initializer должен быть Tensor, а не объектом инициализатора. |
use_resource | Если значение False, создается обычная Variable. Если значение True, вместо нее создается экспериментальная ResourceVariable с четко определенной семантикой. По умолчанию False (в дальнейшем значение изменится на True). При включенном eager execution для этого аргумента всегда принудительно задается значение 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 (например, для реализации ограничений на норму или значение весов слоя). Функция должна принимать на вход непроецированный Tensor, представляющий значение переменной, и возвращать Tensor со спроецированным значением (который должен иметь ту же форму). Ограничения небезопасно использовать при асинхронном распределенном обучении. |
synchronization | Определяет, когда будет выполняться агрегирование распределенной переменной. Допустимые значения — константы, определенные в классе tf.VariableSynchronization. По умолчанию для синхронизации задается значение AUTO, а текущий DistributionStrategy выбирает время синхронизации. |
aggregation | Определяет способ агрегирования распределенной переменной. Допустимые значения — константы, определенные в классе tf.VariableAggregation. |
| Возвращает | |
|---|---|
Созданную или существующую Variable (или PartitionedVariable, если использовался partitioner). |
| Вызывает исключения | |
|---|---|
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_variable