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
)
Используется в блокнотах
| Используется в руководстве | Используется в учебниках |
|---|---|
Переменная сохраняет общие, постоянные данные, изменяемые программой.
Конструктор 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 для получения подробностей.
| Args | |
|---|---|
initial_value | A Tensor, or Python object convertible to a Tensor, which is the initial value for the Variable. The initial value must have a shape specified unless validate_shape is set to False. Can also be a callable with no argument that returns the initial value when called. In that case, dtype must be specified. (Note that initializer functions from init_ops.py must first be bound to a shape before being used here.) |
trainable | If True, GradientTapes automatically watch uses of this variable. Defaults to True, unless synchronization is set to ON_READ, in which case it defaults to False. |
validate_shape | If False, allows the variable to be initialized with a value of unknown shape. If True, the default, the shape of initial_value must be known. |
caching_device | Note: This argument is only valid when using a v1-style Session. Optional device string describing where the Variable should be cached for reading. Defaults to the Variable's device. If not None, caches on another device. Typical use is to cache on the device where the Ops using the Variable reside, to deduplicate copying through Switch and other conditional statements. |
name | Optional name for the variable. Defaults to 'Variable' and gets uniquified automatically. |
variable_def | VariableDef protocol buffer. If not None, recreates the Variable object with its contents, referencing the variable's nodes in the graph, which must already exist. The graph is not changed. variable_def and the other arguments are mutually exclusive. |
dtype | If set, initial_value will be converted to the given type. If None, either the datatype will be kept (if initial_value is a Tensor), or convert_to_tensor will decide. |
import_scope | Optional имя области именования. Name scope to add to the Variable. Only used when initializing from protocol buffer. |
constraint | An optional projection function to be applied to the variable after being updated by an Optimizer (e.g. used to implement norm constraints or value constraints for layer weights). The function must take as input the unprojected Tensor representing the value of the variable and return the Tensor for the projected value (which must have the same shape). Constraints are not safe to use when doing asynchronous distributed training. |
synchronization | Indicates when a distributed variable will be aggregated. Accepted values are constants defined in the class tf.VariableSynchronization. By default the synchronization is set to AUTO and the current DistributionStrategy chooses when to synchronize. |
aggregation | Indicates how a distributed variable will be aggregated. Accepted values are constants defined in the class tf.VariableAggregation. |
shape | (optional) The shape of this variable. If None, the shape of initial_value will be used. When setting this argument to tf.TensorShape(None) (representing an unspecified shape), the variable can be assigned with values of different shapes. |
experimental_enable_variable_lifting | Whether to lift the variable out if it's in a tf.function. Default is True. When this argument is True, variable creation will follow the behavior and restrictions described here. If this argument is False, that description doesn't apply, and you can freely create and use the variable in the tf.function, as if it's a "mutable tf.Tensor". You can't return the variable though. |
| Raises | |
|---|---|
ValueError | If both variable_def and initial_value are specified. |
ValueError | If the initial value is not specified, or does not have a shape and validate_shape is True. |
| Attributes | |
|---|---|
aggregation | |
constraint | Returns the constraint function associated with this variable. |
device | The device of this variable. |
dtype | The DType of this variable. |
graph | The Graph of this variable. |
initial_value | Returns the Tensor used as the initial value for the variable. Note that this is different from |
initializer | The initializer operation for this variable. |
name | The name of this variable. |
op | The Operation of this variable. |
shape | The TensorShape of this variable. |
synchronization | |
trainable | |
Child Classes
Methods
assign
assign(
value, use_locking=False, name=None, read_value=True
)
Присваивает новое значение переменной.
Это по существу сокращение для assign(self, value).
| Args | |
|---|---|
value | A Tensor. Новое значение для этой переменной. |
use_locking | If True, use locking during the assignment. |
name | The name of the operation to be created |
read_value | if True, will return something which evaluates to the new value of the variable; if False will return the assign op. |
| Returns | |
|---|---|
Обновлённая переменная. Если read_value ложно, вместо этого возвращает None в режиме Eager и операцию присваивания в режиме графа. |
assign_add
assign_add(
delta, use_locking=False, name=None, read_value=True
)
Добавляет значение к этой переменной.
Это по существу сокращение для assign_add(self, delta).
| Args | |
|---|---|
delta | A Tensor. Значение, которое нужно добавить к этой переменной. |
use_locking | If True, use locking during the operation. |
name | The name of the operation to be created |
read_value | if True, will return something which evaluates to the new value of the variable; if False will return the assign op. |
| Returns | |
|---|---|
Обновлённая переменная. Если read_value ложно, вместо этого возвращает None в режиме Eager и операцию присваивания в режиме графа. |
assign_sub
assign_sub(
delta, use_locking=False, name=None, read_value=True
)
Вычитает значение из этой переменной.
Это по существу сокращение для assign_sub(self, delta).
| Args | |
|---|---|
delta | A Tensor. Значение, которое нужно вычесть из этой переменной. |
use_locking | If True, use locking during the operation. |
name | The name of the operation to be created |
read_value | if True, will return something which evaluates to the new value of the variable; if False will return the assign op. |
| Returns | |
|---|---|
Обновлённая переменная. Если read_value ложно, вместо этого возвращает None в режиме Eager и операцию присваивания в режиме графа. |
batch_scatter_update
batch_scatter_update(
sparse_delta, use_locking=False, name=None
)
Присваивает tf.IndexedSlices этой переменной поблочно.
Аналогично batch_gather. Предполагается, что у этой переменной и SparseDelta 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 — это тензор размерности 1, эта операция эквивалентна 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. (устарело)
При выполнении этой операции она пытается увеличить значение переменной на 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()
УСТАРЕВШАЯ ФУНКЦИЯ
from_proto
@staticmethod
from_proto(
variable_def, import_scope=None
)
Возвращает объект Variable, созданный из variable_def.
gather_nd
gather_nd(
indices, name=None
)
Извлекает фрагменты из params в тензор с формой, заданной indices.
См. tf.gather_nd для получения подробностей.
| Аргументы | |
|---|---|
indices |
Переменная. Должна быть одного из следующих типов: int32, int64. Индексный тензор. |
name |
Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Тензор Tensor. Имеет тот же тип, что и params. |
get_shape
get_shape() -> tf.TensorShape
Псевдоним для Variable.shape.
initialized_value
initialized_value()
Возвращает значение инициализированной переменной. (устарело)
Следует использовать это вместо самой переменной для инициализации другой переменной со значением, зависящим от значения этой переменной.
# 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
)
Загружает новое значение в эту переменную. (устарело)
Записывает новое значение в память переменной. Не добавляет операции в граф.
Этот удобный метод требует сессии, в которой запущен граф, содержащий эту переменную. Если сессия не передана, используется сессия по умолчанию. См. 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 — размещение переменных в наборах/словарях. Мы не можем размещать переменные в наборы/словари, так как variable.__hash__() больше недоступна, начиная с TensorFlow 2.0.
Следующее вызовет исключение, начиная с 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 к этой переменной.
| Args | |
|---|---|
sparse_delta | tf.IndexedSlices для добавления к этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | имя операции. |
| Returns | |
|---|---|
| Обновлённая переменная. |
| Raises | |
|---|---|
TypeError | если sparse_delta не является IndexedSlices. |
scatter_div
scatter_div(
sparse_delta, use_locking=False, name=None
)
Разделить эту переменную на tf.IndexedSlices.
| Args | |
|---|---|
sparse_delta | tf.IndexedSlices для деления этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | имя операции. |
| Returns | |
|---|---|
| Обновлённая переменная. |
| Raises | |
|---|---|
TypeError | если sparse_delta не является IndexedSlices. |
scatter_max
scatter_max(
sparse_delta, use_locking=False, name=None
)
Обновить эту переменную максимальным значением из tf.IndexedSlices и её текущего значения.
| Args | |
|---|---|
sparse_delta | tf.IndexedSlices для использования в операции max с этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | имя операции. |
| Returns | |
|---|---|
| Обновлённая переменная. |
| Raises | |
|---|---|
TypeError | если sparse_delta не является IndexedSlices. |
scatter_min
scatter_min(
sparse_delta, use_locking=False, name=None
)
Обновить эту переменную минимальным значением из tf.IndexedSlices и её текущего значения.
| Args | |
|---|---|
sparse_delta | tf.IndexedSlices для использования в операции min с этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | имя операции. |
| Returns | |
|---|---|
| Обновлённая переменная. |
| Raises | |
|---|---|
TypeError | если sparse_delta не является IndexedSlices. |
scatter_mul
scatter_mul(
sparse_delta, use_locking=False, name=None
)
Умножить эту переменную на tf.IndexedSlices.
| Args | |
|---|---|
sparse_delta | tf.IndexedSlices для умножения на эту переменную. |
use_locking | Если True, использовать блокировку во время операции. |
name | имя операции. |
| Returns | |
|---|---|
| Обновлённая переменная. |
| Raises | |
|---|---|
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) вдоль K-го измерения self.
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 для получения дополнительной информации о том, как выполнять обновления срезов.
| Args | |
|---|---|
indices | Индексы для использования в операции. |
updates | Значения для использования в операции. |
name | Имя операции. |
| Returns | |
|---|---|
| Обновлённая переменная. |
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) вдоль K-го измерения self.
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 для получения дополнительной информации о том, как выполнять обновления срезов.
| Args | |
|---|---|
indices | Индексы для использования в операции. |
updates | Значения для использования в операции. |
name | Имя операции. |
| Returns | |
|---|---|
| Обновлённая переменная. |
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) вдоль K-го измерения self.
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, которые нужно вычесть из этой переменной. |
True | Если значение истинно, использовать блокировку во время операции. |
name | имя операции. |
| Возвращаемое значение | |
|---|---|
| Обновленная переменная. |
| Исключения | |
|---|---|
TypeError | если sparse_delta не является IndexedSlices. |
scatter_update
scatter_update(
sparse_delta, use_locking=False, name=None
)
Присваивает tf.IndexedSlices этой переменной.
| Аргументы | |
|---|---|
sparse_delta | tf.IndexedSlices, которые нужно присвоить этой переменной. |
True | Если значение истинно, использовать блокировку во время операции. |
name | имя операции. |
| Возвращаемое значение | |
|---|---|
| Обновленная переменная. |
| Исключения | |
|---|---|
TypeError | если sparse_delta не является IndexedSlices. |
set_shape
set_shape(
shape
)
Переопределяет форму этой переменной.
| Аргументы | |
|---|---|
shape | форма, представляющая переопределенную форму. |
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 | Необязательный префикс области именования. |
| Возвращаемое значение | |
|---|---|
Протокольный буфер 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 поддерживает векторизацию. Подробнее о векторизации здесь
Пример:
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]]
Обратите внимание, что присваивания в настоящее время не поддерживают семантику векторизации NumPy.
| Аргументы | |
|---|---|
var | Объект ops.Variable. |
slice_spec | Аргументы для Tensor.getitem. |
| Возвращаемое значение | |
|---|---|
Соответствующий срез "tensor", основанный на "slice_spec". В качестве оператора. Оператор также имеет метод assign(), который можно использовать для генерации оператора присваивания. |
| Исключения | |
|---|---|
ValueError | Если размер среза отрицательный. |
TypeError | TypeError: Если индексы среза не являются целыми числами, слайсами, эллипсами, 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 поддерживает векторизацию. Подробнее о векторизации здесь
Пример:
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 поддерживает векторизацию. Подробнее о векторизации здесь
Пример:
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 поддерживает векторизацию. Подробнее о векторизации здесь
Пример:
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