Spec-Zone.ru › TensorFlow 2.4

tf.Variable

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

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

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
)

Переменная сохраняет общие, постоянные состояния, изменяемые программой.

Конструктор 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, который является начальным значением для Variable. Начальное значение должно иметь заданную форму, если не установлено validate_shape в False. Также может быть вызываемой функцией без аргументов, возвращающей начальное значение при вызове. В этом случае необходимо указать dtype. (Обратите внимание, что функции инициализации из init_ops.py должны быть связаны с формой перед использованием здесь.)
trainable Если True, GradientTapes автоматически отслеживают использование этой переменной. По умолчанию равно True, если не установлено synchronization в ON_READ, в этом случае по умолчанию равно False.
validate_shape Если False, разрешает инициализацию переменной значением с неизвестной формой. Если True, по умолчанию, форма initial_value должна быть известна.
caching_device Необязательная строка устройства, описывающая, где переменная должна быть кэширована для чтения. По умолчанию равно устройству переменной. Если не None, кэширует на другом устройстве. Типичное использование — кэширование на устройстве, где находятся операции, использующие переменную, чтобы избежать дублирования копирования через Switch и другие условные операторы.
name Необязательное имя переменной. По умолчанию равно 'Variable' и автоматически уникализируется.
variable_def VariableDef протокол-буфер. Если не None, пересоздаёт объект Variable со своим содержимым, ссылаясь на узлы переменной в графе, которые должны уже существовать. Граф не изменяется. variable_def и другие аргументы взаимоисключают друг друга.
dtype Если задано, initial_value будет преобразовано к указанному типу. Если None, либо тип данных будет сохранён (если initial_value является тензором), либо convert_to_tensor определит.
import_scope Необязательный string. Область имен для добавления к Variable.. Используется только при инициализации из протокол-буфера.
constraint Необязательная проекционная функция, применяемая к переменной после обновления операцией Optimizer (например, используется для реализации ограничений по норме или значениям для весов слоёв). Функция должна принимать в качестве входных данных непроектированный тензор, представляющий значение переменной, и возвращать тензор для спроецированного значения (которое должно иметь ту же форму). Ограничения небезопасны для использования при асинхронном распределённом обучении.
synchronization Указывает, когда распределённая переменная будет агрегирована. Допустимые значения — константы, определённые в классе tf.VariableSynchronization. По умолчанию синхронизация установлена в AUTO, и текущий DistributionStrategy выбирает, когда синхронизировать.
aggregation Указывает, как будет агрегирована распределённая переменная. Допустимые значения — константы, определённые в классе tf.VariableAggregation.
shape (необязательно) Форма этой переменной. Если None, используется форма initial_value. При установке этого аргумента в tf.TensorShape(None) (представляющий неопределённую форму), переменной можно присвоить значения разных форм.
Исключения
ValueError Если оба variable_def и initial_value указаны.
ValueError Если начальное значение не указано или не имеет формы, и validate_shape установлено в True.
Атрибуты
aggregation
constraint Возвращает функцию ограничения, связанную с этой переменной.
device Устройство этой переменной.
dtype DType этой переменной.
graph Graph этой переменной.
initial_value Возвращает тензор, используемый в качестве начального значения для переменной.

Обратите внимание, что это отличается от 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 ложно, вместо этого возвращает None в режиме Eager и операцию присвоения в режиме графа.

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 ложно, вместо этого возвращает None в режиме Eager и операцию присвоения в режиме графа.

assign_sub

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

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

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

По существу, это сокращение для assign_sub(self, delta).

END_OF_DOCUMENT_MARKER
Args
delta A Tensor. The value to subtract from this variable.
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
The updated variable. If read_value is false, instead returns None in Eager mode and the assign op in graph mode.

batch_scatter_update

View source

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

Assigns tf.IndexedSlices to this variable batch-wise.

Analogous to batch_gather. This assumes that this variable and the sparse_delta IndexedSlices have a series of leading dimensions that are the same for all of them, and the updates are performed on the last dimension of indices. In other words, the dimensions should be the following:

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:]

where

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

And the operation performed can be expressed as:

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

When sparse_delta.indices is a 1D tensor, this operation is equivalent to scatter_update.

To avoid this operation one can looping over the first ndims of the variable and using scatter_update on the subtensors that result of slicing the first dimension. This is a valid option for ndims = 1, but less efficient than this implementation.

Args
sparse_delta tf.IndexedSlices to be assigned to this variable.
use_locking If True, use locking during the operation.
name the name of the operation.
Returns
The updated variable.
Raises
TypeError if sparse_delta is not an IndexedSlices.

count_up_to

View source

count_up_to(
    limit
)

Increments this variable until it reaches limit. (deprecated)

Warning: THIS FUNCTION IS DEPRECATED. It will be removed in a future version. Instructions for updating: Prefer Dataset.range instead.

When that Op is run it tries to increment the variable by 1. If incrementing the variable would bring it above limit then the Op raises the exception OutOfRangeError.

If no error is raised, the Op outputs the value of the variable before the increment.

This is essentially a shortcut for count_up_to(self, limit).

Args
limit value at which incrementing the variable raises an error.
Returns
A Tensor that will hold the variable value before the increment. If no other Op modifies this variable, the values produced will all be distinct.

eval

View source

eval(
    session=None
)

In a session, computes and returns the value of this variable.

This is not a graph construction method, it does not add ops to the graph.

This convenience method requires a session where the graph containing this variable has been launched. If no session is passed, the default session is used. See tf.compat.v1.Session for more information on launching a graph and on sessions.

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())
Args
session The session to use to evaluate this variable. If none, the default session is used.
Returns
A numpy ndarray with a copy of the value of this variable.

experimental_ref

View source

experimental_ref()

DEPRECATED FUNCTION

Warning: THIS FUNCTION IS DEPRECATED. It will be removed in a future version. Instructions for updating: Use ref() instead.

from_proto

View source

@staticmethod
from_proto(
    variable_def, import_scope=None
)

Returns a Variable object created from variable_def.

gather_nd

View source

gather_nd(
    indices, name=None
)

Gather slices from params into a Tensor with shape specified by indices.

See tf.gather_nd for details.

Args
indices A Tensor. Must be one of the following types: int32, int64. Index tensor.
name A name for the operation (optional).
Returns
A Tensor. Has the same type as params.

get_shape

View source

get_shape()

Alias of Variable.shape.

initialized_value

View source

initialized_value()

Returns the value of the initialized variable. (deprecated)

Warning: THIS FUNCTION IS DEPRECATED. It will be removed in a future version. Instructions for updating: Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.

You should use this instead of the variable itself to initialize another variable with a value that depends on the value of this variable.

# 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)
Returns
A Tensor holding the value of this variable after its initializer has run.

load

View source

load(
    value, session=None
)

Load new value into this variable. (deprecated)

Warning: THIS FUNCTION IS DEPRECATED. It will be removed in a future version. Instructions for updating: Prefer Variable.assign which has equivalent behavior in 2.X.

Writes new value to variable's memory. Doesn't add ops to the graph.

This convenience method requires a session where the graph containing this variable has been launched. If no session is passed, the default session is used. See tf.compat.v1.Session for more information on launching a graph and on sessions.

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]
Args
value New variable value
session The session to use to evaluate this variable. If none, the default session is used.
Raises
ValueError Session is not passed and no default session

read_value

View source

read_value()

Returns the value of this variable, read in the current context.

Can be different from value() if it's on another device, with control dependencies, etc.

Returns
A Tensor containing the value of the variable.

ref

View source

ref()

Returns a hashable reference object to this Variable.

Основное использование этого 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 к этой переменной.

Аргументы
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) вдоль 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])
add = v.scatter_nd_add(indices, updates)
with tf.compat.v1.Session() as sess:
  print sess.run(add)

Результат обновления 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) вдоль 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])
op = v.scatter_nd_sub(indices, updates)
with tf.compat.v1.Session() as sess:
  print sess.run(op)

Результат обновления v будет выглядеть так:

[1, -9, 3, -6, -6, 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) вдоль 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])
op = v.scatter_nd_assign(indices, updates)
with tf.compat.v1.Session() as sess:
  print sess.run(op)

Результат обновления v будет таким:

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

См. tf.scatter_nd для получения более подробной информации о том, как выполнять обновления срезов.

Args
indices Индексы, которые будут использоваться в операции.
updates Значения, которые будут использоваться в операции.
name Имя операции.
Returns
Обновленная переменная.

scatter_sub

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

scatter_sub(
    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_update

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

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

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

Args
sparse_delta tf.IndexedSlices для присвоения этой переменной.
use_locking Если True, использовать блокировку во время операции.
name Имя операции.
Returns
Обновленная переменная.
Raises
TypeError если sparse_delta не является IndexedSlices.

set_shape

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

set_shape(
    shape
)

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

Args
shape TensorShape, представляющая переопределённую форму.

sparse_read

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

sparse_read(
    indices, name=None
)

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

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

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

to_proto

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

to_proto(
    export_scope=None
)

Преобразует Variable в протокол VariableDef.

Args
export_scope Необязательный string. Область именования для удаления.
Returns
Протокол VariableDef, или None, если Variable не находится в указанной области именования.

value

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

value()

Возвращает последнюю моментальную фотографию этой переменной.

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

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

Для избежания копий, если потребитель возвращаемого значения находится на той же машине, что и переменная, это фактически возвращает текущее значение переменной, а не копию. Обновления переменной видны потребителю. Если потребитель находится на другом устройстве, он получит копию переменной.

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

__abs__

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

__abs__(
    x, name=None
)

Вычисляет абсолютное значение тензора.

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

Для тензора x комплексных чисел эта операция возвращает тензор типа float32 или float64, который является абсолютным значением каждого элемента в x. Для комплексного числа \(a + bj\), его абсолютное значение вычисляется как \(\sqrt{a^2 + b^2}\).

Например:

# real number
x = tf.constant([-2.25, 3.25])
tf.abs(x)
<tf.Tensor: shape=(2,), dtype=float32,
numpy=array([2.25, 3.25], dtype=float32)>
# complex number
x = tf.constant([[-2.25 + 4.75j], [-3.25 + 5.75j]])
tf.abs(x)
<tf.Tensor: shape=(2, 1), dtype=float64, numpy=
array([[5.25594901],
       [6.60492241]])>
Args
x Tensor или SparseTensor типа float16, float32, float64, int32, int64, complex64 или complex128.
name Имя операции (необязательно).
Returns
Tensor или SparseTensor того же размера, типа и разреженности, что и x, с абсолютными значениями. Обратите внимание, что для complex64 или complex128 входных данных, возвращаемый Tensor будет типа float32 или float64 соответственно.

__add__

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

__add__(
    x, y
)

Операция, вызываемая оператором Tensor.add.

Цель в API:

This method is exposed in TensorFlow's API so that library developers
can register dispatching for <a href="../tf/Tensor#__add__"><code>Tensor.__add__</code></a> to allow it to handle
custom composite tensors & other custom objects.

The API symbol is not intended to be called by users directly and does
appear in TensorFlow's generated documentation.
Args
x Левая часть оператора +.
y Правая часть оператора +.
name Необязательное имя операции.
Returns
Результат поэлементной операции +.

__and__

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

__and__(
    x, y
)

__div__

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

__div__(
    x, y
)

Делит x / y поэлементно (используя семантику оператора деления Python 2). (устарело)

Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: устарела в пользу оператора или tf.math.divide.
Примечание: Предпочтительно использовать оператор деления тензоров или tf.divide, которые подчиняются семантике оператора деления Python 3.

Эта функция делит x и y, принуждая к семантике Python 2. То есть, если x и y являются целыми числами, то результат также будет целым числом. Это в отличие от Python 3, где деление с помощью / всегда даёт число с плавающей точкой, а деление с помощью // всегда даёт целое число.

Аргументы
x Tensor числитель вещественного числового типа.
y Tensor знаменатель вещественного числового типа.
name Имя операции (необязательно).
Возвращаемое значение
x / y возвращает частное от деления x на y.

__eq__

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

__eq__(
    other
)

Сравнивает два объекта `variable` поэлементно на равенство.

__floordiv__

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

__floordiv__(
    x, y
)

Делит x / y поэлементно, округляя к ближайшему меньшему целому.

Аналогично tf.compat.v1.div(x,y) для целых чисел, но использует tf.floor(tf.compat.v1.div(x,y)) для аргументов с плавающей точкой, чтобы результат всегда был целым (хотя, возможно, целым, представленным как число с плавающей точкой). Этот оператор генерируется x // y операцией целочисленного деления в Python 3 и в Python 2.7 с from __future__ import division.

x и y должны иметь одинаковый тип, и результат также будет иметь тот же тип.

Аргументы
x Tensor числитель вещественного числового типа.
y Tensor знаменатель вещественного числового типа.
name Имя операции (необязательно).
Возвращаемое значение
x / y округлено вниз.
Исключения
TypeError Если входные данные комплексные.

__ge__

__ge__(
    x, y, name=None
)

Возвращает булево значение (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__(
    var, slice_spec
)

Создаёт объект-помощник среза, заданный переменной.

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

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

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

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

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

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

__gt__

__gt__(
    x, y, name=None
)

Возвращает булево значение (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__(
    x, name=None
)

__iter__

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

__iter__()

Метод-заглушка для предотвращения итерации.

Не вызывать.

ПРИМЕЧАНИЕ (mrry): Если мы регистрируем getitem в качестве перегруженного оператора, Python будет старательно пытаться перебрать тензор переменной от 0 до бесконечности. Объявление этого метода предотвращает это непреднамеренное поведение.

Исключения
TypeError при вызове.

__le__

__le__(
    x, y, name=None
)

Возвращает булево значение (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__(
    x, y, name=None
)

Возвращает булево значение (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 A Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y A Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращаемое значение
A Tensor типа bool.

__matmul__

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

__matmul__(
    x, y
)

Умножает матрицу a на матрицу b, получая a * b.

Входы должны, после любых транспонирований, быть тензорами ранга >= 2, где внутренние 2 измерения указывают допустимые размеры матричного умножения, а любые другие внешние измерения указывают размер соответствующей группы.

Обе матрицы должны быть одного типа. Поддерживаемые типы: float16, float32, float64, int32, complex64, complex128.

Любая матрица может быть транспонирована или сопряжённо-транспонирована (сопряжена и транспонирована) на лету, установив соответствующий флаг в True. По умолчанию они равны False.

Если одна или обе матрицы содержат много нулей, можно использовать более эффективный алгоритм умножения, установив соответствующий флаг a_is_sparse или b_is_sparse в True. По умолчанию они равны False. Эта оптимизация доступна только для обычных матриц (тензоров ранга 2) с типами данных bfloat16 или float32.

Простое матричное умножение 2-D тензора:

a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3])
a  # 2-D tensor
<tf.Tensor: shape=(2, 3), dtype=int32, numpy=
array([[1, 2, 3],
       [4, 5, 6]], dtype=int32)>
b = tf.constant([7, 8, 9, 10, 11, 12], shape=[3, 2])
b  # 2-D tensor
<tf.Tensor: shape=(3, 2), dtype=int32, numpy=
array([[ 7,  8],
       [ 9, 10],
       [11, 12]], dtype=int32)>
c = tf.matmul(a, b)
c  # `a` * `b`
<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[ 58,  64],
       [139, 154]], dtype=int32)>

Матричное умножение с группой размерностью [2]:

a = tf.constant(np.arange(1, 13, dtype=np.int32), shape=[2, 2, 3])
a  # 3-D tensor
<tf.Tensor: shape=(2, 2, 3), dtype=int32, numpy=
array([[[ 1,  2,  3],
        [ 4,  5,  6]],
       [[ 7,  8,  9],
        [10, 11, 12]]], dtype=int32)>
b = tf.constant(np.arange(13, 25, dtype=np.int32), shape=[2, 3, 2])
b  # 3-D tensor
<tf.Tensor: shape=(2, 3, 2), dtype=int32, numpy=
array([[[13, 14],
        [15, 16],
        [17, 18]],
       [[19, 20],
        [21, 22],
        [23, 24]]], dtype=int32)>
c = tf.matmul(a, b)
c  # `a` * `b`
<tf.Tensor: shape=(2, 2, 2), dtype=int32, numpy=
array([[[ 94, 100],
        [229, 244]],
       [[508, 532],
        [697, 730]]], dtype=int32)>

Так как python >= 3.5 поддерживает оператор @ (см. PEP 465). В TensorFlow он просто вызывает функцию tf.matmul(), поэтому следующие строки эквивалентны:

d = a @ b @ [[10], [11]]
d = tf.matmul(tf.matmul(a, b), [[10], [11]])
Аргументы
a tf.Tensor типа float16, float32, float64, int32, complex64, complex128 и ранга > 1.
b tf.Tensor того же типа и ранга, что и a.
transpose_a Если True, a транспонируется перед умножением.
transpose_b Если True, b транспонируется перед умножением.
adjoint_a Если True, a сопряжена и транспонирована перед умножением.
adjoint_b Если True, b сопряжена и транспонирована перед умножением.
a_is_sparse Если True, a рассматривается как разреженная матрица. Обратите внимание, что это не поддерживает tf.sparse.SparseTensor, это просто оптимизации, предполагающие, что большинство значений в a равны нулю. См. tf.sparse.sparse_dense_matmul для поддержки умножения на tf.sparse.SparseTensor.
b_is_sparse Если True, b рассматривается как разреженная матрица. Обратите внимание, что это не поддерживает tf.sparse.SparseTensor, это просто оптимизации, предполагающие, что большинство значений в a равны нулю. См. tf.sparse.sparse_dense_matmul для поддержки умножения на tf.sparse.SparseTensor.
name Имя операции (необязательно).
Возвращаемое значение
A tf.Tensor того же типа, что и a и b, где каждая внутренняя матрица является произведением соответствующих матриц в a и b, например, если все атрибуты транспонирования или сопряжения равны False:

output[..., i, j] = sum_k (a[..., i, k] * b[..., k, j]) для всех индексов i, j.

Note Это матричное произведение, а не поэлементное.
Исключения
ValueError Если transpose_a и adjoint_a, или transpose_b и adjoint_b оба установлены в True.

__mod__

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

__mod__(
    x, y
)

Возвращает поэлементный остаток от деления. Когда x < 0 или y < 0

истинно, это соответствует семантике Python, в том, что результат здесь согласован с целочисленным делением по наименьшему целому. Например, floor(x / y) * y + mod(x, y) = x.

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

__mul__

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

__mul__(
    x, y
)

Распределяет cwise mul для "DenseDense" и "DenseSparse".

__ne__

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

__ne__(
    other
)

Сравнивает два объекта переменной поэлементно на равенство.

__neg__

__neg__(
    x, name=None
)

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

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

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

__or__

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

__or__(
    x, y
)

__pow__

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

__pow__(
    x, y
)

Вычисляет степень одного значения по другому.

Даны тензор x и тензор y, эта операция вычисляет \(x^y\) для соответствующих элементов в x и y. Например:

x = tf.constant([[2, 2], [3, 3]])
y = tf.constant([[8, 16], [2, 3]])
tf.pow(x, y)  # [[256, 65536], [9, 27]]
Аргументы
x A Tensor типа float16, float32, float64, int32, int64, complex64 или complex128.
y A Tensor типа float16, float32, float64, int32, int64, complex64 или complex128.
name Имя операции (необязательно).
Возвращаемое значение
A Tensor.

__radd__

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

__radd__(
    y, x
)

Операция, вызываемая оператором Tensor.add.

Назначение в API:

This method is exposed in TensorFlow's API so that library developers
can register dispatching for <a href="../tf/Tensor#__add__"><code>Tensor.__add__</code></a> to allow it to handle
custom composite tensors & other custom objects.

The API symbol is not intended to be called by users directly and does
appear in TensorFlow's generated documentation.
Аргументы
x Левая часть оператора +.
y Правая часть оператора +.
name Необязательное имя операции.
Возвращаемое значение
Результат поэлементной операции +.

__rand__

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

__rand__(
    y, x
)

__rdiv__

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

__rdiv__(
    y, x
)

Делит x / y поэлементно (используя семантику оператора деления Python 2). (Устарело)

Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: Заменена оператором или tf.math.divide.
Примечание: Предпочтительно использовать оператор деления тензоров или tf.divide, которые подчиняются семантике оператора деления Python 3.

Эта функция делит x и y, принуждая к семантике Python 2. То есть, если x и y являются целыми числами, то результат будет целым числом. Это отличается от Python 3, где деление с / всегда является числом с плавающей точкой, а деление с // всегда является целым числом.

Аргументы
x Tensor числитель вещественного числового типа.
y Tensor знаменатель вещественного числового типа.
name Имя операции (необязательно).
Возвращаемое значение
x / y возвращает частное x и y.

__rfloordiv__

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

__rfloordiv__(
    y, x
)

Делит x / y поэлементно, округляя к ближайшему наименее отрицательному целому числу.

То же самое, что и tf.compat.v1.div(x,y) для целых чисел, но использует tf.floor(tf.compat.v1.div(x,y)) для чисел с плавающей точкой, чтобы результат всегда был целым числом (возможно, целым числом, представленным как число с плавающей точкой). Этот оператор генерируется оператором x // y целочисленного деления в Python 3 и в Python 2.7 с from __future__ import division.

x и y должны иметь одинаковый тип, и результат также будет иметь одинаковый тип.

Аргументы
x Tensor числитель вещественного числового типа.
y Tensor знаменатель вещественного числового типа.
name Имя операции (необязательно).
Возвращаемое значение
x / y округляется вниз.
Исключения
TypeError Если входные данные являются комплексными.

__rmatmul__

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

__rmatmul__(
    y, x
)

Умножает матрицу a на матрицу b, получая a * b.

Входы должны, после любых транспонирований, быть тензорами ранга >= 2, где внутренние 2 измерения указывают допустимые измерения матричного умножения, а любые дополнительные внешние измерения указывают соответствующий размер пакетной обработки.

Обе матрицы должны быть одного типа. Поддерживаемые типы: float16, float32, float64, int32, complex64, complex128.

Любую матрицу можно транспонировать или сопряжённо-транспонировать (сопрячь и транспонировать) на лету, установив соответствующий флаг в True. По умолчанию они равны False.

Если одна или обе матрицы содержат много нулей, можно использовать более эффективный алгоритм умножения, установив соответствующий флаг a_is_sparse или b_is_sparse в True. По умолчанию они равны False. Эта оптимизация доступна только для обычных матриц (тензоров ранга-2) с типами данных bfloat16 или float32.

Простое умножение матриц тензора 2-D:

a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3])
a  # 2-D tensor
<tf.Tensor: shape=(2, 3), dtype=int32, numpy=
array([[1, 2, 3],
       [4, 5, 6]], dtype=int32)>
b = tf.constant([7, 8, 9, 10, 11, 12], shape=[3, 2])
b  # 2-D tensor
<tf.Tensor: shape=(3, 2), dtype=int32, numpy=
array([[ 7,  8],
       [ 9, 10],
       [11, 12]], dtype=int32)>
c = tf.matmul(a, b)
c  # `a` * `b`
<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[ 58,  64],
       [139, 154]], dtype=int32)>

Умножение матриц пакета с формой пакета [2]:

a = tf.constant(np.arange(1, 13, dtype=np.int32), shape=[2, 2, 3])
a  # 3-D tensor
<tf.Tensor: shape=(2, 2, 3), dtype=int32, numpy=
array([[[ 1,  2,  3],
        [ 4,  5,  6]],
       [[ 7,  8,  9],
        [10, 11, 12]]], dtype=int32)>
b = tf.constant(np.arange(13, 25, dtype=np.int32), shape=[2, 3, 2])
b  # 3-D tensor
<tf.Tensor: shape=(2, 3, 2), dtype=int32, numpy=
array([[[13, 14],
        [15, 16],
        [17, 18]],
       [[19, 20],
        [21, 22],
        [23, 24]]], dtype=int32)>
c = tf.matmul(a, b)
c  # `a` * `b`
<tf.Tensor: shape=(2, 2, 2), dtype=int32, numpy=
array([[[ 94, 100],
        [229, 244]],
       [[508, 532],
        [697, 730]]], dtype=int32)>

С Python >= 3.5 поддерживается оператор @ (см. PEP 465). В TensorFlow он просто вызывает функцию tf.matmul(), поэтому следующие строки эквивалентны:

d = a @ b @ [[10], [11]]
d = tf.matmul(tf.matmul(a, b), [[10], [11]])
Аргументы
a tf.Tensor типа float16, float32, float64, int32, complex64, complex128 и ранга > 1.
b tf.Tensor со сходным типом и рангом, как a.
transpose_a Если True, a транспонируется перед умножением.
transpose_b Если True, b транспонируется перед умножением.
adjoint_a Если True, a сопряжено и транспонируется перед умножением.
adjoint_b Если True, b сопряжено и транспонируется перед умножением.
a_is_sparse Если True, a обрабатывается как разреженная матрица. Обратите внимание, что это не поддерживает tf.sparse.SparseTensor, это просто оптимизации, предполагающие, что большинство значений в a равны нулю. См. tf.sparse.sparse_dense_matmul для поддержки умножения tf.sparse.SparseTensor.
b_is_sparse Если True, b обрабатывается как разреженная матрица. Обратите внимание, что это не поддерживает tf.sparse.SparseTensor, это просто оптимизации, предполагающие, что большинство значений в a равны нулю. См. tf.sparse.sparse_dense_matmul для поддержки умножения tf.sparse.SparseTensor.
name Имя операции (необязательно).
Возвращаемое значение
tf.Tensor того же типа, что и a и b, где каждая внутренняя матрица является произведением соответствующих матриц в a и b, например, если все атрибуты транспонирования или сопряжения являются False:

output[..., i, j] = sum_k (a[..., i, k] * b[..., k, j]), для всех индексов i, j.

Note Это матричное произведение, а не поэлементное произведение.
Исключения
ValueError Если transpose_a и adjoint_a, или transpose_b и adjoint_b оба установлены в True.

__rmod__

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

__rmod__(
    y, x
)

Возвращает остаток от деления по элементам. Когда x < 0 xor y < 0 равно

истинному, это соответствует семантике Python, так что результат здесь согласуется с целочисленным делением с округлением к нулю. Например, floor(x / y) * y + mod(x, y) = x.

Примечание: math.floormod поддерживает вещание. Дополнительную информацию о вещании можно найти здесь
Аргументы
x Tensor. Должен быть одного из следующих типов: int32, int64, uint64, bfloat16, half, float32, float64.
y Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращаемое значение
Tensor. Имеет тот же тип, что и x.

__rmul__

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

__rmul__(
    y, x
)

Выполняет поэлементное умножение для "DenseDense" и "DenseSparse".

__ror__

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

__ror__(
    y, x
)

__rpow__

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

__rpow__(
    y, x
)

Вычисляет степень одного значения по отношению к другому.

При заданных тензорах x и y, эта операция вычисляет \(x^y\) для соответствующих элементов в x и y. Например:

x = tf.constant([[2, 2], [3, 3]])
y = tf.constant([[8, 16], [2, 3]])
tf.pow(x, y)  # [[256, 65536], [9, 27]]
Аргументы
x А Tensor типа float16, float32, float64, int32, int64, complex64 или complex128.
y А Tensor типа float16, float32, float64, int32, int64, complex64 или complex128.
name Имя операции (необязательно).
Возвращает
А Tensor.

__rsub__

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

__rsub__(
    y, x
)

Возвращает x - y поэлементно.

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

__rtruediv__

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

__rtruediv__(
    y, x
)

Делит x / y поэлементно (используя семантику оператора деления Python 3).

Примечание: Предпочтительнее использовать оператор тензора или tf.divide, которые следуют семантике оператора деления Python.

Эта функция принудительно использует семантику оператора деления Python 3, где все целочисленные аргументы сначала преобразуются в плавающие типы. Эта операция генерируется обычным делением x / y в Python 3 и в Python 2.7 с from __future__ import division. Если вам нужна целочисленная операция деления, которая округляет вниз, используйте x // y или tf.math.floordiv.

x и y должны иметь одинаковый числовой тип. Если входные данные являются числами с плавающей точкой, выходной будет иметь тот же тип. Если входные данные целочисленные, входные данные преобразуются в float32 для int8 и int16 и float64 для int32 и int64 (соответствуя поведению Numpy).

Аргументы
x Tensor числитель числового типа.
y Tensor знаменатель числового типа.
name Имя операции (необязательно).
Возвращает
x / y, вычисленное в формате с плавающей точкой.
Возможные ошибки
TypeError Если x и y имеют разные типы данных.

__rxor__

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

__rxor__(
    y, x
)

__sub__

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

__sub__(
    x, y
)

Возвращает x - y поэлементно.

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

__truediv__

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

__truediv__(
    x, y
)

Делит x / y поэлементно (используя семантику оператора деления Python 3).

Примечание: Предпочтительнее использовать оператор тензора или tf.divide, которые следуют семантике оператора деления Python.

Эта функция принудительно использует семантику оператора деления Python 3, где все целочисленные аргументы сначала преобразуются в плавающие типы. Эта операция генерируется обычным делением x / y в Python 3 и в Python 2.7 с from __future__ import division. Если вам нужна целочисленная операция деления, которая округляет вниз, используйте x // y или tf.math.floordiv.

x и y должны иметь одинаковый числовой тип. Если входные данные являются числами с плавающей точкой, выходной будет иметь тот же тип. Если входные данные целочисленные, входные данные преобразуются в float32 для int8 и int16 и float64 для int32 и int64 (соответствуя поведению Numpy).

Аргументы
x Tensor числитель числового типа.
y Tensor знаменатель числового типа.
name Имя операции (необязательно).
Возвращает
x / y, вычисленное в формате с плавающей точкой.
Возможные ошибки
TypeError Если x и y имеют разные типы данных.

__xor__

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

__xor__(
    x, y
)

© 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/r2.4/api_docs/python/tf/Variable

Spec-Zone.ru

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