Spec-Zone.ru › TensorFlow

tf.Variable

См. руководство по переменным.

tf.Variable(
    initial_value=None,
    trainable=None,
    validate_shape=True,
    caching_device=None,
    name=None,
    variable_def=None,
    dtype=None,
    import_scope=None,
    constraint=None,
    synchronization=tf.VariableSynchronization.AUTO,
    aggregation=tf.compat.v1.VariableAggregation.NONE,
    shape=None,
    experimental_enable_variable_lifting=True
)

Используется в блокнотах

Используется в руководстве Используется в учебных материалах
  • Перенос контрольных точек модели
  • Введение в градиенты и автоматическое дифференцирование
  • Введение в переменные
  • Расширенные методы автоматического дифференцирования
  • Повышение производительности с помощью tf.function
  • Масштабируемое сжатие моделей
  • Пользовательский цикл обучения с Keras и MultiWorkerMirroredStrategy
  • Перенос стиля с помощью нейронных сетей
  • Обучаемое сжатие данных
  • Зоопарк обучаемых распределений

Переменная хранит общее постоянное состояние, которым управляет программа.

Конструктору Variable() требуется начальное значение переменной — Tensor любого типа и формы. Это начальное значение определяет тип и форму переменной. После создания тип и форма переменной не меняются. Значение можно изменить с помощью одного из методов присваивания.

v = tf.Variable(1.)
v.assign(2.)
<tf.Variable ... shape=() dtype=float32, numpy=2.0>
v.assign_add(0.5)
<tf.Variable ... shape=() dtype=float32, numpy=2.5>

Аргумент shape конструктора Variable позволяет создать переменную с менее определённой формой, чем у её initial_value:

v = tf.Variable(1., shape=tf.TensorShape(None))
v.assign([[1.]])
<tf.Variable ... shape=<unknown> dtype=float32, numpy=array([[1.]], ...)>

Как и любой Tensor, переменные, созданные с помощью Variable(), можно использовать в качестве входных данных операций. Кроме того, на переменные распространяется перегрузка всех операторов класса Tensor.

w = tf.Variable([[1.], [2.]])
x = tf.constant([[3., 4.]])
tf.matmul(w, x)
<tf.Tensor:... shape=(2, 2), ... numpy=
  array([[3., 4.],
         [6., 8.]], dtype=float32)>
tf.sigmoid(w + x)
<tf.Tensor:... shape=(2, 2), ...>

При создании модели машинного обучения часто бывает удобно различать переменные, содержащие обучаемые параметры модели, и другие переменные, например переменную step для подсчёта шагов обучения. Для этого конструктор переменной поддерживает параметр trainable=<bool>. По умолчанию tf.GradientTape отслеживает обучаемые переменные:

with tf.GradientTape(persistent=True) as tape:
  trainable = tf.Variable(1.)
  non_trainable = tf.Variable(2., trainable=False)
  x1 = trainable * 2.
  x2 = non_trainable * 3.
tape.gradient(x1, trainable)
<tf.Tensor:... shape=(), dtype=float32, numpy=2.0>
assert tape.gradient(x2, non_trainable) is None  # Unwatched

Переменные автоматически отслеживаются при присваивании атрибутам типов, наследующих tf.Module.

m = tf.Module()
m.v = tf.Variable([1.])
m.trainable_variables
(<tf.Variable ... shape=(1,) ... numpy=array([1.], dtype=float32)>,)

Такое отслеживание позволяет сохранять значения переменных в контрольные точки обучения или в SavedModels, содержащие сериализованные графы TensorFlow.

Переменные часто захватываются и используются в tf.function. Это работает так же, как и для функции без декоратора:

v = tf.Variable(0.)
read_and_decrement = tf.function(lambda: v.assign_sub(0.1))
read_and_decrement()
<tf.Tensor: shape=(), dtype=float32, numpy=-0.1>
read_and_decrement()
<tf.Tensor: shape=(), dtype=float32, numpy=-0.2>

Переменные, созданные внутри tf.function, должны принадлежать объекту вне функции и создаваться только один раз:

class M(tf.Module):
  @tf.function
  def __call__(self, x):
    if not hasattr(self, "v"):  # Or set self.v to None in __init__
      self.v = tf.Variable(x)
    return self.v * x
m = M()
m(2.)
<tf.Tensor: shape=(), dtype=float32, numpy=4.0>
m(3.)
<tf.Tensor: shape=(), dtype=float32, numpy=6.0>
m.v
<tf.Variable ... shape=() dtype=float32, numpy=2.0>

Подробности см. в документации по tf.function.

Аргументы
initial_value Tensor или объект Python, преобразуемый в Tensor, который служит начальным значением переменной. Для начального значения должна быть задана форма, если только validate_shape не равно False. Также это может быть функция без аргументов, возвращающая начальное значение при вызове. В этом случае необходимо задать dtype. (Обратите внимание: функции инициализации из init_ops.py перед использованием здесь необходимо привязать к форме.)
trainable Если True, GradientTape автоматически отслеживает использование этой переменной. По умолчанию значение равно True, если только synchronization не установлено в ON_READ; в этом случае по умолчанию используется False.
validate_shape Если False, переменную можно инициализировать значением неизвестной формы. Если True (значение по умолчанию), форма initial_value должна быть известна.
caching_device Примечание: этот аргумент допустим только при использовании Session в стиле v1. Необязательная строка устройства, указывающая, где следует кэшировать переменную для чтения. По умолчанию используется устройство переменной. Если значение не равно None, кэширование выполняется на другом устройстве. Обычно переменную кэшируют на устройстве, где находятся использующие её Ops, чтобы исключить повторное копирование через Switch и другие условные операторы.
name Необязательное имя переменной. По умолчанию используется 'Variable', а уникальность имени обеспечивается автоматически.
variable_def Буфер протокола VariableDef. Если значение не равно None, объект Variable создаётся заново со своим содержимым и ссылками на узлы переменной в графе, которые должны уже существовать. Граф не изменяется. variable_def и остальные аргументы являются взаимоисключающими.
dtype Если задано, initial_value будет преобразовано в указанный тип. Если значение равно None, тип данных сохраняется (если initial_value — Tensor) либо определяется с помощью convert_to_tensor.
import_scope Необязательный string. Пространство имён, добавляемое к Variable.. Используется только при инициализации из буфера протокола.
constraint Необязательная функция проекции, применяемая к переменной после её обновления с помощью Optimizer (например, для реализации ограничений нормы или ограничений значений весов слоя). Функция должна принимать на вход непроецированный Tensor, представляющий значение переменной, и возвращать Tensor проецированного значения (который должен иметь ту же форму). Ограничения небезопасно использовать при асинхронном распределённом обучении.
synchronization Указывает, когда будет выполняться агрегирование распределённой переменной. Допустимые значения — константы, определённые в классе tf.VariableSynchronization. По умолчанию для синхронизации задаётся AUTO, а текущий DistributionStrategy определяет, когда выполнять синхронизацию.
aggregation Указывает, как будет выполняться агрегирование распределённой переменной. Допустимые значения — константы, определённые в классе tf.VariableAggregation.
shape (необязательно) Форма этой переменной. Если значение равно None, используется форма initial_value. Если задать этому аргументу значение tf.TensorShape(None) (представляющее неопределённую форму), переменной можно присваивать значения разных форм.
experimental_enable_variable_lifting Следует ли выносить переменную за пределы tf.function. Значение по умолчанию — True. Если этому аргументу присвоено значение True, создание переменной будет соответствовать описанному здесь поведению и ограничениям. Если аргумент равен False, это описание не применяется: переменную можно свободно создавать и использовать в tf.function, как «изменяемый tf.Tensor». Однако возвращать переменную нельзя.
Вызывает исключения
ValueError Если одновременно заданы variable_def и initial_value.
ValueError Если начальное значение не задано или не имеет формы, а validate_shape равно True.
Атрибуты
aggregation
constraint Возвращает функцию ограничений, связанную с этой переменной.
device Устройство этой переменной.
dtype DType этой переменной.
graph Graph этой переменной.
initial_value Возвращает Tensor, использованный в качестве начального значения переменной.

Обратите внимание, что это отличается от initialized_value(), который запускает операцию инициализации переменной, прежде чем вернуть её значение. Этот метод возвращает тензор, используемый операцией инициализации переменной.

initializer Операция инициализации этой переменной.
name Имя этой переменной.
op Operation этой переменной.
shape TensorShape этой переменной.
synchronization
trainable

Дочерние классы

class SaveSliceInfo

Методы

assign

Посмотреть исходный код

assign(
    value, use_locking=False, name=None, read_value=True
)

Присваивает переменной новое значение.

По сути, это сокращённая запись для assign(self, value).

Аргументы
value Tensor. Новое значение этой переменной.
use_locking Если True, во время присваивания используется блокировка.
name Имя создаваемой операции
read_value Если True, возвращает объект, вычисление которого даёт новое значение переменной; если False, возвращает операцию присваивания.
Возвращает
Обновлённую переменную. Если read_value равно false, вместо этого в eager-режиме возвращается None, а в режиме графа — операция присваивания.

assign_add

Посмотреть исходный код

assign_add(
    delta, use_locking=False, name=None, read_value=True
)

Прибавляет значение к этой переменной.

По сути, это сокращённая запись для assign_add(self, delta).

Аргументы
delta Tensor. Значение, которое нужно прибавить к этой переменной.
use_locking Если True, во время операции используется блокировка.
name Имя создаваемой операции
read_value Если True, возвращает объект, вычисление которого даёт новое значение переменной; если False, возвращает операцию присваивания.
Возвращает
Обновлённую переменную. Если read_value равно false, вместо этого в eager-режиме возвращается None, а в режиме графа — операция присваивания.

assign_sub

Посмотреть исходный код

assign_sub(
    delta, use_locking=False, name=None, read_value=True
)

Вычитает значение из этой переменной.

По сути, это сокращённая запись для assign_sub(self, delta).

Аргументы
delta Tensor. Значение, которое нужно вычесть из этой переменной.
use_locking Если True, во время операции используется блокировка.
name Имя создаваемой операции
read_value Если True, возвращает объект, вычисление которого даёт новое значение переменной; если False, возвращает операцию присваивания.
Возвращает
Обновлённую переменную. Если read_value равно false, вместо этого в eager-режиме возвращается None, а в режиме графа — операция присваивания.

batch_scatter_update

Посмотреть исходный код

batch_scatter_update(
    sparse_delta, use_locking=False, name=None
)

Присваивает этой переменной значения tf.IndexedSlices пакетами.

Аналогично batch_gather. Предполагается, что эта переменная и разреженная переменная sparse_delta типа IndexedSlices имеют последовательность начальных измерений, совпадающих для всех них, а обновления выполняются по последнему измерению индексов. Иными словами, измерения должны быть следующими:

num_prefix_dims = sparse_delta.indices.ndims - 1 batch_dim = num_prefix_dims + 1 sparse_delta.updates.shape = sparse_delta.indices.shape + var.shape[ batch_dim:]

где

sparse_delta.updates.shape[:num_prefix_dims] == sparse_delta.indices.shape[:num_prefix_dims] == var.shape[:num_prefix_dims]

Выполняемую операцию можно записать следующим образом:

var[i_1, ..., i_n, sparse_delta.indices[i_1, ..., i_n, j]] = sparse_delta.updates[ i_1, ..., i_n, j]

Если sparse_delta.indices — одномерный тензор, эта операция эквивалентна scatter_update.

Чтобы не выполнять эту операцию, можно пройти циклом по первому ndims переменной и использовать scatter_update для подтензоров, полученных срезом по первому измерению. Это допустимый вариант для ndims = 1, но он менее эффективен, чем данная реализация.

Аргументы
sparse_delta tf.IndexedSlices, которые нужно присвоить этой переменной.
use_locking Если True, во время операции используется блокировка.
name Имя операции.
Возвращает
Обновлённую переменную.
Вызывает исключения
TypeError если sparse_delta не является IndexedSlices.

count_up_to

Посмотреть исходный код

count_up_to(
    limit
)

Увеличивает значение этой переменной, пока оно не достигнет limit. (Устарело.)

Устарело: Эта функция устарела. Она будет удалена в будущей версии. Рекомендации по обновлению: вместо неё используйте Dataset.range.

При выполнении этой операции она пытается увеличить значение переменной на 1. Если в результате увеличения значение переменной превысит limit, операция вызовет исключение OutOfRangeError.

Если ошибка не возникает, операция выводит значение переменной до увеличения.

По сути, это сокращённая запись для count_up_to(self, limit).

Аргументы
limit Значение, при достижении которого увеличение переменной вызывает ошибку.
Возвращает
Tensor, содержащий значение переменной до увеличения. Если никакая другая операция не изменяет эту переменную, все полученные значения будут различаться.

eval

Посмотреть исходный код

eval(
    session=None
)

В сессии вычисляет и возвращает значение этой переменной.

Это не метод построения графа: он не добавляет операции в граф.

Для этого вспомогательного метода нужна сессия, в которой запущен граф, содержащий эту переменную. Если сессия не передана, используется сессия по умолчанию. Дополнительную информацию о запуске графа и сессиях см. в разделе tf.compat.v1.Session.

v = tf.Variable([1, 2])
init = tf.compat.v1.global_variables_initializer()

with tf.compat.v1.Session() as sess:
    sess.run(init)
    # Usage passing the session explicitly.
    print(v.eval(sess))
    # Usage with the default session.  The 'with' block
    # above makes 'sess' the default session.
    print(v.eval())
Аргументы
session Сессия, используемая для вычисления значения этой переменной. Если сессия не задана, используется сессия по умолчанию.
Возвращает
Массив NumPy ndarray с копией значения этой переменной.

experimental_ref

Посмотреть исходный код

experimental_ref()

УСТАРЕВШАЯ ФУНКЦИЯ

Устарело: Эта функция устарела. Она будет удалена в будущей версии. Рекомендации по обновлению: используйте ref().

from_proto

Посмотреть исходный код

@staticmethod
from_proto(
    variable_def, import_scope=None
)

Возвращает объект Variable, созданный из variable_def.

gather_nd

Посмотреть исходный код

gather_nd(
    indices, name=None
)

Собирает срезы из params в Tensor с формой, заданной indices.

Подробности см. в tf.gather_nd.

Аргументы
indices Tensor. Допустимые типы: int32, int64. Тензор индексов.
name Имя операции (необязательно).
Возвращает
Tensor. Имеет тот же тип, что и params.

get_shape

Посмотреть исходный код

get_shape() -> tf.TensorShape

Синоним Variable.shape.

initialized_value

Посмотреть исходный код

initialized_value()

Возвращает значение инициализированной переменной. (Устарело.)

Устарело: Эта функция устарела. Она будет удалена в будущей версии. Рекомендации по обновлению: используйте Variable.read_value. В версии 2.X переменные инициализируются автоматически как в eager-режиме, так и в режиме графа (внутри tf.defun).

Используйте этот метод вместо самой переменной, чтобы инициализировать другую переменную значением, зависящим от значения этой переменной.

# Initialize 'v' with a random tensor.
v = tf.Variable(tf.random.truncated_normal([10, 40]))
# Use `initialized_value` to guarantee that `v` has been
# initialized before its value is used to initialize `w`.
# The random values are picked only once.
w = tf.Variable(v.initialized_value() * 2.0)
Возвращает
Tensor, содержащее значение этой переменной после выполнения её инициализатора.

load

Посмотреть исходный код

load(
    value, session=None
)

Загружает в эту переменную новое значение. (Устарело.)

Устарело: Эта функция устарела. Она будет удалена в будущей версии. Рекомендации по обновлению: предпочтительно использовать Variable.assign, который в версии 2.X ведёт себя аналогичным образом.

Записывает новое значение в память переменной. Не добавляет операции в граф.

Для этого вспомогательного метода нужна сессия, в которой запущен граф, содержащий эту переменную. Если сессия не передана, используется сессия по умолчанию. Дополнительную информацию о запуске графа и сессиях см. в разделе tf.compat.v1.Session.

v = tf.Variable([1, 2])
init = tf.compat.v1.global_variables_initializer()

with tf.compat.v1.Session() as sess:
    sess.run(init)
    # Usage passing the session explicitly.
    v.load([2, 3], sess)
    print(v.eval(sess)) # prints [2 3]
    # Usage with the default session.  The 'with' block
    # above makes 'sess' the default session.
    v.load([3, 4], sess)
    print(v.eval()) # prints [3 4]
Аргументы
value Новое значение переменной
session Сессия, используемая для вычисления значения этой переменной. Если сессия не задана, используется сессия по умолчанию.
Вызывает исключения
ValueError Сессия не передана, и сессия по умолчанию отсутствует

read_value

Посмотреть исходный код

read_value()

Возвращает значение этой переменной, считанное в текущем контексте.

Оно может отличаться от value(), если переменная находится на другом устройстве, имеет зависимости управления и т. д.

Возвращает
Tensor, содержащее значение переменной.

ref

Посмотреть исходный код

ref()

Возвращает хешируемый объект-ссылку на эту переменную.

Основной сценарий использования этого API — добавление переменных в множество или словарь. Начиная с TensorFlow 2.0, переменные нельзя добавлять в множество или словарь, поскольку variable.__hash__() больше недоступен.

Следующий код начиная с версии 2.0 вызовет исключение:

x = tf.Variable(5)
y = tf.Variable(10)
z = tf.Variable(10)
variable_set = {x, y, z}
Traceback (most recent call last):

TypeError: Variable is unhashable. Instead, use tensor.ref() as the key.
variable_dict = {x: 'five', y: 'ten'}
Traceback (most recent call last):

TypeError: Variable is unhashable. Instead, use tensor.ref() as the key.

Вместо этого можно использовать variable.ref().

variable_set = {x.ref(), y.ref(), z.ref()}
x.ref() in variable_set
True
variable_dict = {x.ref(): 'five', y.ref(): 'ten', z.ref(): 'ten'}
variable_dict[y.ref()]
'ten'

Кроме того, объект-ссылка предоставляет функцию .deref(), которая возвращает исходную переменную.

x = tf.Variable(5)
x.ref().deref()
<tf.Variable 'Variable:0' shape=() dtype=int32, numpy=5>

scatter_add

Посмотреть исходный код

scatter_add(
    sparse_delta, use_locking=False, name=None
)

Прибавляет к этой переменной значения tf.IndexedSlices.

Аргументы
sparse_delta tf.IndexedSlices, который нужно добавить к этой переменной.
use_locking Если True, использовать блокировку во время операции.
name название операции.
Возвращает
Обновлённую переменную.
Исключения
TypeError если sparse_delta не является IndexedSlices.

scatter_div

Посмотреть исходный код

scatter_div(
    sparse_delta, use_locking=False, name=None
)

Разделить эту переменную на tf.IndexedSlices.

Аргументы
sparse_delta tf.IndexedSlices, на который нужно разделить эту переменную.
use_locking Если True, использовать блокировку во время операции.
name название операции.
Возвращает
Обновлённую переменную.
Исключения
TypeError если sparse_delta не является IndexedSlices.

scatter_max

Посмотреть исходный код

scatter_max(
    sparse_delta, use_locking=False, name=None
)

Обновляет эту переменную, записывая в неё максимум из tf.IndexedSlices и самой переменной.

Аргументы
sparse_delta tf.IndexedSlices, используемый как аргумент функции max вместе с этой переменной.
use_locking Если True, использовать блокировку во время операции.
name название операции.
Возвращает
Обновлённую переменную.
Исключения
TypeError если sparse_delta не является IndexedSlices.

scatter_min

Посмотреть исходный код

scatter_min(
    sparse_delta, use_locking=False, name=None
)

Обновляет эту переменную, записывая в неё минимум из tf.IndexedSlices и самой переменной.

Аргументы
sparse_delta tf.IndexedSlices, используемый как аргумент функции min вместе с этой переменной.
use_locking Если True, использовать блокировку во время операции.
name название операции.
Возвращает
Обновлённую переменную.
Исключения
TypeError если sparse_delta не является IndexedSlices.

scatter_mul

Посмотреть исходный код

scatter_mul(
    sparse_delta, use_locking=False, name=None
)

Умножить эту переменную на tf.IndexedSlices.

Аргументы
sparse_delta tf.IndexedSlices, на который нужно умножить эту переменную.
use_locking Если True, использовать блокировку во время операции.
name название операции.
Возвращает
Обновлённую переменную.
Исключения
TypeError если sparse_delta не является IndexedSlices.

scatter_nd_add

Посмотреть исходный код

scatter_nd_add(
    indices, updates, name=None
)

Выполняет разреженное сложение отдельных значений или срезов переменной.

Ранг переменной равен P, а indices — это Tensor ранга Q.

indices должен быть целочисленным тензором, содержащим индексы в self. Его форма должна быть [d_0, ..., d_{Q-2}, K], где 0 < K <= P.

Внутреннее измерение indices (длиной K) соответствует индексам элементов (если K = P) или срезов (если K < P) вдоль измерения self с номером K.

updates — это Tensor ранга Q-1+P-K со следующей формой:

[d_0, ..., d_{Q-2}, self.shape[K], ..., self.shape[P-1]].

Например, предположим, что нужно добавить 4 разрозненных элемента к тензору ранга 1, состоящему из 8 элементов. В Python это обновление выглядело бы так:

v = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
indices = tf.constant([[4], [3], [1] ,[7]])
updates = tf.constant([9, 10, 11, 12])
v.scatter_nd_add(indices, updates)
print(v)

В результате переменная v обновилась бы следующим образом:

[1, 13, 3, 14, 14, 6, 7, 20]

Подробнее об обновлении срезов см. в разделе tf.scatter_nd.

Аргументы
indices Индексы, используемые в операции.
updates Значения, используемые в операции.
name название операции.
Возвращает
Обновлённую переменную.

scatter_nd_sub

Посмотреть исходный код

scatter_nd_sub(
    indices, updates, name=None
)

Выполняет разреженное вычитание отдельных значений или срезов переменной.

Предполагается, что ранг переменной равен P, а indices — это Tensor ранга Q.

indices должен быть целочисленным тензором, содержащим индексы в self. Его форма должна быть [d_0, ..., d_{Q-2}, K], где 0 < K <= P.

Внутреннее измерение indices (длиной K) соответствует индексам элементов (если K = P) или срезов (если K < P) вдоль измерения self с номером K.

updates — это Tensor ранга Q-1+P-K со следующей формой:

[d_0, ..., d_{Q-2}, self.shape[K], ..., self.shape[P-1]].

Например, предположим, что нужно добавить 4 разрозненных элемента к тензору ранга 1, состоящему из 8 элементов. В Python это обновление выглядело бы так:

v = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
indices = tf.constant([[4], [3], [1] ,[7]])
updates = tf.constant([9, 10, 11, 12])
v.scatter_nd_sub(indices, updates)
print(v)

После обновления v выглядела бы так:

[1, -9, 3, -6, -4, 6, 7, -4]

Подробнее об обновлении срезов см. в разделе tf.scatter_nd.

Аргументы
indices Индексы, используемые в операции.
updates Значения, используемые в операции.
name название операции.
Возвращает
Обновлённую переменную.

scatter_nd_update

Посмотреть исходный код

scatter_nd_update(
    indices, updates, name=None
)

Выполняет разреженное присваивание отдельных значений или срезов переменной.

Ранг переменной равен P, а indices — это Tensor ранга Q.

indices должен быть целочисленным тензором, содержащим индексы в self. Его форма должна быть [d_0, ..., d_{Q-2}, K], где 0 < K <= P.

Внутреннее измерение indices (длиной K) соответствует индексам элементов (если K = P) или срезов (если K < P) вдоль измерения self с номером K.

updates — это Tensor ранга Q-1+P-K со следующей формой:

[d_0, ..., d_{Q-2}, self.shape[K], ..., self.shape[P-1]].

Например, предположим, что нужно добавить 4 разрозненных элемента к тензору ранга 1, состоящему из 8 элементов. В Python это обновление выглядело бы так:

v = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
indices = tf.constant([[4], [3], [1] ,[7]])
updates = tf.constant([9, 10, 11, 12])
v.scatter_nd_update(indices, updates)
print(v)

В результате переменная v обновилась бы следующим образом:

[1, 11, 3, 10, 9, 6, 7, 12]

Подробнее об обновлении срезов см. в разделе tf.scatter_nd.

Аргументы
indices Индексы, используемые в операции.
updates Значения, используемые в операции.
name название операции.
Возвращает
Обновлённую переменную.

scatter_sub

Посмотреть исходный код

scatter_sub(
    sparse_delta, use_locking=False, name=None
)

Вычитает tf.IndexedSlices из этой переменной.

Аргументы
sparse_delta tf.IndexedSlices, которое нужно вычесть из этой переменной.
use_locking Если True, использовать блокировку во время операции.
name название операции.
Возвращает
Обновлённую переменную.
Исключения
TypeError если sparse_delta не является IndexedSlices.

scatter_update

Посмотреть исходный код

scatter_update(
    sparse_delta, use_locking=False, name=None
)

Присваивает этой переменной значение tf.IndexedSlices.

Аргументы
sparse_delta tf.IndexedSlices, которое нужно присвоить этой переменной.
use_locking Если True, использовать блокировку во время операции.
name название операции.
Возвращает
Обновлённую переменную.
Исключения
TypeError если sparse_delta не является IndexedSlices.

set_shape

Посмотреть исходный код

set_shape(
    shape
)

Переопределяет форму этой переменной.

Аргументы
shape TensorShape, задающий переопределённую форму.

sparse_read

Посмотреть исходный код

sparse_read(
    indices, name=None
)

Извлекает срезы из params по оси axis в соответствии с индексами.

Эта функция поддерживает подмножество возможностей tf.gather. Подробнее об использовании см. в документации tf.gather.

Аргументы
indices Индекс Tensor. Должен иметь один из следующих типов: int32, int64. Должен находиться в диапазоне [0, params.shape[axis]).
name Имя операции (необязательно).
Возвращает
Tensor. Имеет тот же тип, что и params.

to_proto

Посмотреть исходный код

to_proto(
    export_scope=None
)

Преобразует Variable в протокольный буфер VariableDef.

Аргументы
export_scope Необязательный string. Область имён, которую нужно удалить.
Возвращает
Протокольный буфер VariableDef или None, если Variable не входит в указанную область имён.

value

Посмотреть исходный код

value()

Возвращает последний снимок этой переменной.

Обычно вызывать этот метод не нужно, так как все операции, которым требуется значение переменной, вызывают его автоматически с помощью вызова convert_to_tensor().

Возвращает Tensor, содержащий значение переменной. Нельзя присвоить этому тензору новое значение, поскольку он не является ссылкой на переменную.

Чтобы избежать копирования, если потребитель возвращённого значения находится на том же устройстве, что и переменная, фактически возвращается текущее значение переменной, а не его копия. Потребитель видит обновления переменной. Если потребитель находится на другом устройстве, ему передаётся копия переменной.

Возвращает
Tensor, содержащий значение переменной.

__abs__

Посмотреть исходный код

__abs__(
    name=None
)

__add__

Посмотреть исходный код

__add__(
    y
)

__and__

Посмотреть исходный код

__and__(
    y
)

__div__

Посмотреть исходный код

__div__(
    y
)

__eq__

Посмотреть исходный код

__eq__(
    other
)

Поэлементно сравнивает две переменные на равенство.

__floordiv__

Посмотреть исходный код

__floordiv__(
    y
)

__ge__

__ge__(
    y: Annotated[Any, tf.raw_ops.Any],
    name=None
) -> Annotated[Any, tf.raw_ops.Any]

Поэлементно возвращает логическое значение выражения (x >= y).

Примечание: math.greater_equal поддерживает broadcasting. Подробнее о broadcasting — здесь

Пример:

x = tf.constant([5, 4, 6, 7])
y = tf.constant([5, 2, 5, 10])
tf.math.greater_equal(x, y) ==> [True, True, True, False]

x = tf.constant([5, 4, 6, 7])
y = tf.constant([5])
tf.math.greater_equal(x, y) ==> [True, False, True, True]
Аргументы
x Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращает
Tensor типа bool.

__getitem__

Посмотреть исходный код

__getitem__(
    slice_spec
)

Создаёт вспомогательный объект среза для заданной переменной.

Это позволяет создать подтензор из части текущего содержимого переменной. Подробные примеры создания срезов см. в разделе tf.Tensor.getitem.

Кроме того, эта функция позволяет присваивать значения выбранному срезу. Это похоже на функциональность __setitem__ в Python. Однако синтаксис отличается, чтобы пользователь мог сохранить операцию присваивания для группировки или передачи в sess.run() в TF1. Например:

import tensorflow as tf
A = tf.Variable([[1,2,3], [4,5,6], [7,8,9]], dtype=tf.float32)
print(A[:2, :2])  # => [[1,2], [4,5]]

A[:2,:2].assign(22. * tf.ones((2, 2))))
print(A) # => [[22, 22, 3], [22, 22, 6], [7,8,9]]

Обратите внимание, что в настоящее время присваивания не поддерживают семантику broadcasting NumPy.

Аргументы
var Объект ops.Variable.
slice_spec Аргументы для Tensor.getitem.
Возвращает
Соответствующий срез «tensor», выбранный на основе «slice_spec», в виде оператора. У оператора также есть метод assign(), который можно использовать для создания оператора присваивания.
Исключения
ValueError Если размер диапазона среза отрицателен.
TypeError TypeError: если индексы среза не являются int, slice, ellipsis, tf.newaxis или тензорами int32/int64.

__gt__

__gt__(
    y: Annotated[Any, tf.raw_ops.Any],
    name=None
) -> Annotated[Any, tf.raw_ops.Any]

Поэлементно возвращает логическое значение выражения (x > y).

Примечание: math.greater поддерживает broadcasting. Подробнее о broadcasting — здесь

Пример:

x = tf.constant([5, 4, 6])
y = tf.constant([5, 2, 5])
tf.math.greater(x, y) ==> [False, True, True]

x = tf.constant([5, 4, 6])
y = tf.constant([5])
tf.math.greater(x, y) ==> [False, False, True]
Аргументы
x Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращает
Tensor типа bool.

__invert__

Посмотреть исходный код

__invert__(
    name=None
)

__iter__

Посмотреть исходный код

__iter__()

При eager-выполнении перебирает значения переменной.

__le__

__le__(
    y: Annotated[Any, tf.raw_ops.Any],
    name=None
) -> Annotated[Any, tf.raw_ops.Any]

Поэлементно возвращает логическое значение выражения (x <= y).

Примечание: math.less_equal поддерживает broadcasting. Подробнее о broadcasting — здесь

Пример:

x = tf.constant([5, 4, 6])
y = tf.constant([5])
tf.math.less_equal(x, y) ==> [True, True, False]

x = tf.constant([5, 4, 6])
y = tf.constant([5, 6, 6])
tf.math.less_equal(x, y) ==> [True, True, True]
Аргументы
x Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращает
Tensor типа bool.

__lt__

__lt__(
    y: Annotated[Any, tf.raw_ops.Any],
    name=None
) -> Annotated[Any, tf.raw_ops.Any]

Поэлементно возвращает логическое значение выражения (x < y).

Примечание: math.less поддерживает broadcasting. Подробнее о broadcasting — здесь

Пример:

x = tf.constant([5, 4, 6])
y = tf.constant([5])
tf.math.less(x, y) ==> [False, True, False]

x = tf.constant([5, 4, 6])
y = tf.constant([5, 6, 7])
tf.math.less(x, y) ==> [False, True, True]
Аргументы
x Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращает
Tensor типа bool.

__matmul__

Посмотреть исходный код

__matmul__(
    y
)

__mod__

Посмотреть исходный код

__mod__(
    y
)

__mul__

Посмотреть исходный код

__mul__(
    y
)

__ne__

Посмотреть исходный код

__ne__(
    other
)

Поэлементно сравнивает две переменные на равенство.

__neg__

__neg__(
    name=None
) -> Annotated[Any, tf.raw_ops.Any]

Вычисляет поэлементное числовое отрицание.

То есть \(y = -x\).

Аргументы
x Значение типа Tensor. Должно иметь один из следующих типов: bfloat16, half, float32, float64, int8, int16, int32, int64, complex64, complex128.
name Имя операции (необязательно).
Возвращает
Значение типа Tensor. Имеет тот же тип, что и x.

__or__

Посмотреть исходный код

__or__(
    y
)

__pow__

Посмотреть исходный код

__pow__(
    y
)

__radd__

Посмотреть исходный код

__radd__(
    x
)

__rand__

Посмотреть исходный код

__rand__(
    x
)

__rdiv__

Посмотреть исходный код

__rdiv__(
    x
)

__rfloordiv__

Посмотреть исходный код

__rfloordiv__(
    x
)

__rmatmul__

Посмотреть исходный код

__rmatmul__(
    x
)

__rmod__

Посмотреть исходный код

__rmod__(
    x
)

__rmul__

Посмотреть исходный код

__rmul__(
    x
)

__ror__

Посмотреть исходный код

__ror__(
    x
)

__rpow__

Посмотреть исходный код

__rpow__(
    x
)

__rsub__

Посмотреть исходный код

__rsub__(
    x
)

__rtruediv__

Посмотреть исходный код

__rtruediv__(
    x
)

__rxor__

Посмотреть исходный код

__rxor__(
    x
)

__sub__

Посмотреть исходный код

__sub__(
    y
)

__truediv__

Посмотреть исходный код

__truediv__(
    y
)

__xor__

Посмотреть исходный код

__xor__(
    y
)

© 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/Variable

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API