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 в основном совместим с немедленным выполнением и tf.function, но только если вы используете его в сочетании с декоратором tf.compat.v1.keras.utils.track_tf1_style_variables. (Хотя он будет вести себя так, как будто reuse всегда установлен на AUTO_REUSE.)
Дополнительную информацию см. в руководстве по миграции модели https://www.tensorflow.org/guide/migrate/model_mapping.
Если вы не используете его с tf.compat.v1.keras.utils.track_tf1_style_variables, get_variable каждый раз будет создавать совершенно новую переменную и никогда не будет повторно использовать переменные, независимо от имен переменных или reuse аргументов.
Эквивалент этого символа в TF2 — tf.Variable, но обратите внимание, что при использовании tf.Variable вы должны убедиться, что отслеживаете свои переменные (и аргументы регуляризации) либо вручную, либо с помощью механизмов tf.Module или tf.keras.layers.Layer.
В руководстве по миграции https://www.tensorflow.org/guide/migrate/model_mapping#incremental_migration_to_native_tf2 приводятся дополнительные сведения о поэтапной миграции этих случаев использования на tf.Variable.
Примечание: Аргументpartitionerнесовместим с поведением TF2, даже если используетсяtf.compat.v1.keras.utils.track_tf1_style_variables. Его можно заменить использованиемParameterServerStrategyи его разделителей. Дополнительную информацию см. в руководстве по миграции многопроцессорных CPU/GPU https://www.tensorflow.org/guide/migrate/multi_worker_cpu_gpu_training и руководствах ParameterServerStrategy, на которые оно ссылается.
Описание
Поведение аналогично get_variable, за исключением того, что переменные добавляются в коллекцию LOCAL_VARIABLES, а trainable устанавливается в False. Эта функция добавляет префикс к имени с текущим областью переменной и выполняет проверки повторного использования. Подробное описание работы повторного использования см. в разделе «Как работать с областями переменных» https://tensorflow.org/guide/variables. Вот пример основного использования:
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, используется glorot_uniform_initializer. Инициализатор также может быть тензором, в этом случае переменная инициализируется этим значением и формой.
Аналогично, если regularizer — None (по умолчанию), используется регуляризатор по умолчанию, переданный в области переменных (если он тоже 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 должна быть известна. Для этого initializer должен быть тензором, а не объектом инициализатора. |
use_resource | Если False, создаётся обычная переменная. Если True, создаётся экспериментальная ResourceVariable вместо неё со своими свойствами. По умолчанию False (в дальнейшем будет изменено на True). При включённом немедленном выполнении этот аргумент всегда принудительно устанавливается в 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 (например, используется для реализации ограничений норм или значений для весов слоя). Функция должна принимать на вход непроектированный тензор, представляющий значение переменной, и возвращать тензор для спроецированного значения (форма которого должна быть такой же). Ограничения небезопасны при асинхронной распределённой тренировке. |
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/versions/r2.9/api_docs/python/tf/compat/v1/get_local_variable