tf.get_local_variable
Получает существующую локальную переменную или создаёт новую.
tf.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.VariableAggregation.NONE
)
Поведение аналогично 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
Если initializer равен None (по умолчанию), будет использован инициализатор по умолчанию, переданный в области переменных. Если и он равен None, будет использован glorot_uniform_initializer. Инициализатор также может быть тензором, в этом случае переменная инициализируется этим значением и формой.
Аналогично, если regularizer равен None (по умолчанию), будет использован регулярный по умолчанию, переданный в области переменных (если и он равен None, то по умолчанию регуляризация не выполняется).
Если указан partitioner, возвращается PartitionedVariable. Доступ к этому объекту как к Tensor возвращает фрагменты, конкатенированные по оси разбиения.
Доступны некоторые полезные partitioner. См., например, 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, если был использован partitioner). |
| Возможные ошибки | |
|---|---|
ValueError | при создании новой переменной, если форма не объявлена, при нарушении повторного использования при создании переменной или при несовпадении initializer типа и dtype типа. Повторное использование устанавливается внутри variable_scope. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/get_local_variable