tf.compat.v1.Variable
См. Руководство по переменным.
Наследуется от: Variable
tf.compat.v1.Variable(
initial_value=None, trainable=None, collections=None, validate_shape=True,
caching_device=None, name=None, variable_def=None, dtype=None,
expected_shape=None, import_scope=None, constraint=None, use_resource=None,
synchronization=tf.VariableSynchronization.AUTO,
aggregation=tf.compat.v1.VariableAggregation.NONE, shape=None
)
Переменная сохраняет состояние в графе между вызовами run(). Вы добавляете переменную в граф, создавая экземпляр класса Variable.
Конструктор Variable() требует начального значения для переменной, которое может быть Tensor любого типа и формы. Начальное значение определяет тип и форму переменной. После создания тип и форма переменной фиксируются. Значение можно изменить, используя один из методов assign.
Если вы хотите изменить форму переменной позже, вам нужно использовать операцию assign с validate_shape=False.
Как и любая Tensor, переменные, созданные с помощью Variable(), могут использоваться в качестве входных данных для других операций в графе. Кроме того, все перегруженные операторы для класса Tensor переносятся на переменные, поэтому вы также можете добавлять узлы в граф, просто выполняя арифметические операции над переменными.
import tensorflow as tf # Create a variable. w = tf.Variable(<initial-value>, name=<optional-name>) # Use the variable in the graph like any Tensor. y = tf.matmul(w, ...another variable or tensor...) # The overloaded operators are available too. z = tf.sigmoid(w + y) # Assign a new value to the variable with `assign()` or a related method. w.assign(w + 1.0) w.assign_add(1.0)
При запуске графа переменные должны быть явно инициализированы, прежде чем вы сможете запустить операции, использующие их значение. Вы можете инициализировать переменную, выполнив её операцию инициализации, восстановив переменную из файла сохранения или просто выполнив операцию assign, которая присваивает переменной значение. Фактически, операция инициализации переменной — это просто операция assign, которая присваивает начальное значение переменной самой переменной.
# Launch the graph in a session.
with tf.compat.v1.Session() as sess:
# Run the variable initializer.
sess.run(w.initializer)
# ...you now can run ops that use the value of 'w'...
Наиболее распространённый шаблон инициализации — использование удобной функции global_variables_initializer() для добавления в граф операции, инициализирующей все переменные. Затем вы запускаете эту операцию после запуска графа.
# Add an Op to initialize global variables.
init_op = tf.compat.v1.global_variables_initializer()
# Launch the graph in a session.
with tf.compat.v1.Session() as sess:
# Run the Op that initializes global variables.
sess.run(init_op)
# ...you can now run any Op that uses variable values...
Если вам нужно создать переменную с начальным значением, зависящим от другой переменной, используйте initialized_value() другой переменной. Это гарантирует, что переменные инициализируются в правильном порядке.
Все переменные автоматически собираются в графе, где они создаются. По умолчанию конструктор добавляет новую переменную в коллекцию графа GraphKeys.GLOBAL_VARIABLES. Удобная функция global_variables() возвращает содержимое этой коллекции.
При построении модели машинного обучения часто удобно различать переменные, содержащие обучаемые параметры модели, и другие переменные, такие как переменная global step, используемая для подсчёта шагов обучения. Чтобы упростить это, конструктор переменной поддерживает параметр trainable=<bool>. Если True, новая переменная также добавляется в коллекцию графа GraphKeys.TRAINABLE_VARIABLES. Удобная функция trainable_variables() возвращает содержимое этой коллекции. Различные классы Optimizer используют эту коллекцию в качестве списка по умолчанию для оптимизируемых переменных.
v = tf.Variable(True) tf.cond(v, lambda: v.assign(False), my_false_fn) # Note: this is broken.
Здесь, добавление use_resource=True при создании переменной решит любые проблемы с недетерминизмом:
v = tf.Variable(True, use_resource=True) tf.cond(v, lambda: v.assign(False), my_false_fn)
Для использования замены переменных, не имеющей этих проблем:
- Добавьте
use_resource=Trueпри созданииtf.Variable; - Вызовите
tf.compat.v1.get_variable_scope().set_use_resource(True)внутриtf.compat.v1.variable_scopeперед вызовомtf.compat.v1.get_variable().
| Аргументы | |
|---|---|
initial_value | Tensor или объект Python, преобразуемый в Tensor, который является начальным значением для переменной. Начальное значение должно иметь указанную форму, если validate_shape не установлено в False. Также может быть вызываемой функцией без аргументов, возвращающей начальное значение при вызове. В этом случае, dtype должно быть указано. (Обратите внимание, что функции инициализации из init_ops.py должны быть связаны с формой перед использованием здесь.) |
trainable | Если True, также добавляет переменную в коллекцию графа GraphKeys.TRAINABLE_VARIABLES. Эта коллекция используется в качестве списка по умолчанию для переменных, используемых классами Optimizer. По умолчанию равно True, если synchronization установлено в ON_READ, в этом случае по умолчанию равно False. |
collections | Список ключей коллекций графа. Новая переменная добавляется в эти коллекции. По умолчанию равно [GraphKeys.GLOBAL_VARIABLES]. |
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 решит. |
expected_shape | TensorShape. Если установлено, ожидается, что initial_value будет иметь эту форму. |
import_scope | Необязательная string. Название области именования для добавления к Variable.. Используется только при инициализации из протокольного буфера. |
constraint | Необязательная функция проектирования, которая применяется к переменной после её обновления операцией Optimizer (например, используется для реализации ограничений нормы или ограничений значений для весов слоя). Функция должна принимать в качестве входного значения не спроецированный тензор, представляющий значение переменной, и возвращать тензор спроецированного значения (который должен иметь ту же форму). Ограничения не безопасны для использования при асинхронном распределённом обучении. |
use_resource | использовать ли переменные ресурсов. |
synchronization | Указывает, когда распределённая переменная будет агрегирована. Допустимые значения — константы, определённые в классе tf.VariableSynchronization. По умолчанию синхронизация установлена в AUTO, и текущий DistributionStrategy выбирает, когда синхронизироваться. |
aggregation | Указывает, как распределённая переменная будет агрегирована. Допустимые значения — константы, определённые в классе tf.VariableAggregation. |
shape | (необязательно) Форма этой переменной. Если None, используется форма initial_value. При установке этого аргумента в tf.TensorShape(None) (представляющий неопределённую форму), переменная может быть присвоена значениями различных форм. |
| Возбуждает | |
|---|---|
ValueError | Если оба variable_def и initial_value указаны. |
ValueError | Если начальное значение не указано или не имеет формы, а validate_shape равно True. |
RuntimeError | Если включена жадная (eager) обработка. |
| Атрибуты | |
|---|---|
aggregation | |
constraint | Возвращает функцию ограничения, связанную с этой переменной. |
device | Устройство этой переменной. |
dtype | DType этой переменной. |
graph | Graph этой переменной. |
initial_value | Возвращает тензор, используемый в качестве начального значения для переменной. Обратите внимание, что это отличается от |
initializer | Операция инициализации этой переменной. |
name | Имя этой переменной. |
op | Operation этой переменной. |
shape | TensorShape этой переменной. |
synchronization | |
trainable | |
Подклассы
Методы
assign
assign(
value, use_locking=False, name=None, read_value=True
)
Присваивает новое значение переменной.
Это по сути сокращение для assign(self, value).
| Аргументы | |
|---|---|
value | A Tensor. Новое значение для этой переменной. |
use_locking | Если True, использовать блокировку во время присваивания. |
name | Название операции, которая должна быть создана |
read_value | если True, вернёт значение новой переменной; если False вернёт операцию присваивания. |
| Возвращаемое значение | |
|---|---|
Обновлённая переменная. Если read_value ложно, то вместо этого возвращается None в режиме Eager и операция присваивания в режиме графа. |
data-text="assign_add" id="assign_add">assign_add
assign_add(
delta, use_locking=False, name=None, read_value=True
)
Добавляет значение к этой переменной.
Это по существу сокращение для assign_add(self, delta).
| Аргументы | |
|---|---|
delta | A Tensor. Значение, которое нужно добавить к этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | Название операции, которая должна быть создана |
read_value | если True, вернёт значение новой переменной; если False вернёт операцию присваивания. |
| Возвращаемое значение | |
|---|---|
Обновлённая переменная. Если read_value ложно, то вместо этого возвращается None в режиме Eager и операция присваивания в режиме графа. |
data-text="assign_sub" id="assign_sub">assign_sub
assign_sub(
delta, use_locking=False, name=None, read_value=True
)
Вычитает значение из этой переменной.
Это по существу сокращение для assign_sub(self, delta).
| Аргументы | |
|---|---|
delta | A Tensor. Значение, которое нужно вычесть из этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | Название операции, которая должна быть создана |
read_value | если True, вернёт значение новой переменной; если False вернёт операцию присваивания. |
| Возвращаемое значение | |
|---|---|
Обновлённая переменная. Если read_value ложно, то вместо этого возвращается None в режиме Eager и операция присваивания в режиме графа. |
data-text="batch_scatter_update" id="batch_scatter_update">batch_scatter_update
batch_scatter_update(
sparse_delta, use_locking=False, name=None
)
Присваивает tf.IndexedSlices этой переменной поэтапно.
Аналогично batch_gather. Предполагается, что у этой переменной и IndexedSlices sparse_delta есть ряд ведущих измерений, которые одинаковы для всех, а обновления выполняются по последнему измерению индексов. Другими словами, измерения должны быть следующими:
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 является тензором 1D, эта операция эквивалентна scatter_update.
Чтобы избежать этой операции, можно перебрать первые ndims переменной и использовать scatter_update на подтензорах, которые являются результатом среза первого измерения. Это допустимый вариант для ndims = 1, но менее эффективен, чем это реализация.
| Аргументы | |
|---|---|
sparse_delta | tf.IndexedSlices для присвоения этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | название операции. |
| Возвращаемое значение | |
|---|---|
| Обновлённая переменная. |
| Исключения | |
|---|---|
TypeError | если sparse_delta не является IndexedSlices. |
data-text="count_up_to" id="count_up_to">count_up_to
count_up_to(
limit
)
Увеличивает эту переменную, пока она не достигнет limit. (устарело)
При выполнении этой операции она пытается увеличить переменную на 1. Если увеличение переменной приведёт к значению, превышающему limit, то операция вызывает исключение OutOfRangeError.
Если исключение не возникает, операция возвращает значение переменной до увеличения.
Это по существу сокращение для count_up_to(self, limit).
| Аргументы | |
|---|---|
limit | значение, при достижении которого увеличение переменной вызывает ошибку. |
| Возвращаемое значение | |
|---|---|
A Tensor, который будет содержать значение переменной перед увеличением. Если никакая другая операция не изменяет эту переменную, создаваемые значения будут все различны. |
data-text="eval" id="eval">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 | Сессия, используемая для оценки этой переменной. Если None, используется сессия по умолчанию. |
| Возвращаемое значение | |
|---|---|
Массив NumPy ndarray с копией значения этой переменной. |
data-text="experimental_ref" id="experimental_ref">experimental_ref
experimental_ref()
УСТАРЕВШАЯ ФУНКЦИЯ
data-text="from_proto" id="from_proto">from_proto
@staticmethod
from_proto(
variable_def, import_scope=None
)
Возвращает объект Variable, созданный из variable_def.
data-text="gather_nd" id="gather_nd">gather_nd
gather_nd(
indices, name=None
)
Собрать срезы из params в тензор с формой, заданной indices.
См. tf.gather_nd для получения подробностей.
| Аргументы | |
|---|---|
indices | A Tensor. Должен быть одного из следующих типов: int32, int64. Индексный тензор. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor. Имеет тот же тип, что и params. |
data-text="get_shape" id="get_shape">get_shape
get_shape()
Псевдоним Variable.shape.
data-text="initialized_value" id="initialized_value">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 к этой переменной.
| Аргументы | |
|---|---|
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 — это тензор ранга Q.
indices должен быть целочисленным тензором, содержащим индексы в self. Он должен иметь форму [d_0, ..., d_{Q-2}, K], где 0 < K <= P.
Самый внутренний размер indices (длиной K) соответствует индексам элементов (если K = P) или срезов (если K < P) вдоль K-го измерения self.
updates имеет ранг 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 для получения более подробной информации о том, как выполнять обновления срезов.
| Аргументы | |
|---|---|
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__(
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]])>
| Аргументы | |
|---|---|
x | A Tensor или SparseTensor типа float16, float32, float64, int32, int64, complex64 или complex128. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A 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="https://www.tensorflow.org/api_docs/python/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 | Необязательное имя операции. |
| Возвращаемое значение | |
|---|---|
Результат поэлементной операции +. |
__and__
__and__(
x, y
)
__div__
__div__(
x, y
)
Делит x / y поэлементно (используя семантику оператора деления Python 2). (устаревший)
Примечание: Предпочтительнее использовать оператор деления тензора или tf.divide, которые следуют семантике оператора деления Python 3.
Данная функция делит x и y, принуждая к семантике Python 2. То есть, если x и y являются целыми числами, то результат будет целым числом. Это отличается от Python 3, где деление с / всегда является вещественным числом, а деление с // всегда является целым числом.
| Аргументы | |
|---|---|
x | Tensor числитель вещественного числового типа. |
y | Tensor знаменатель вещественного числового типа. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
x / y возвращает частное x и y. |
__eq__
__eq__(
other
)
Сравнивает два переменных поэлементно на равенство.
__floordiv__
__floordiv__(
x, y
)
Делит x / y поэлементно, округляя в сторону наименьшего целого.
То же самое, что и tf.compat.v1.div(x,y) для целых чисел, но использует tf.floor(tf.compat.v1.div(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 | A Tensor. Должен быть одним из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A 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 | Объект ops.Variable. |
slice_spec | Аргументы для Tensor.getitem. |
| Возвращаемое значение | |
|---|---|
Соответствующий срез "tensor", на основе "slice_spec". В качестве оператора. Оператор также имеет метод assign(), который может быть использован для генерации оператора присваивания. |
| Исключения | |
|---|---|
ValueError | Если диапазон среза имеет отрицательный размер. |
TypeError | TypeError: Если индексы среза не являются int, slice, ellipsis, 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 | A Tensor. Должен быть одним из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A 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 | A Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A 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-мерного тензора:
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:
| |
Note | Это матричное произведение, а не поэлементное произведение. |
| Исключения | |
|---|---|
ValueError | Если transpose_a и adjoint_a, или transpose_b и adjoint_b оба установлены в True. |
__mod__
__mod__(
x, y
)
Возвращает поэлементный остаток от деления. Когда x < 0 xor 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="https://www.tensorflow.org/api_docs/python/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.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:
| |
Note | Это матричное произведение, а не поэлементное произведение. |
| Исключения | |
|---|---|
ValueError | Если transpose_a и adjoint_a, или transpose_b и adjoint_b оба установлены в True. |
__rmod__
__rmod__(
y, x
)
Возвращает остаток от деления по элементам. Когда 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. |
__rmul__
__rmul__(
y, x
)
Вызывает cwise mul для "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 | A Tensor типа float16, float32, float64, int32, int64, complex64 или complex128. |
y | A Tensor типа float16, float32, float64, int32, int64, complex64 или complex128. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor. |
__rsub__
__rsub__(
y, x
)
Возвращает x - y по элементам.
Примечание: Subtract поддерживает векторизацию. Подробнее о векторизации здесь
| Аргументы | |
|---|---|
x | A Tensor. Должен быть одного из следующих типов: bfloat16, half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128, uint32. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor. Имеет тот же тип, что и x. |
__rtruediv__
__rtruediv__(
y, x
)
Делит x / y по элементам (используя семантику оператора деления Python 3).
Примечание: Предпочтительнее использовать оператор тензора или tf.divide, которые подчиняются семантике оператора деления Python.
Эта функция принуждает к семантике оператора деления Python 3, где все целочисленные аргументы сначала преобразуются в плавающие типы. Эта операция генерируется обычным делением в Python 3 и в Python 2.7 с from __future__ import division. Если вам нужно целочисленное деление с округлением вниз, используйте x // y или tf.math.floordiv.
x и y должны иметь тот же числовой тип. Если входные данные являются числами с плавающей точкой, выходной тип будет таким же. Если входные данные являются целыми числами, входные данные преобразуются в float32 для int8 и int16 и float64 для int32 и int64 (соответствуя поведению Numpy).
| Аргументы | |
|---|---|
x | Численное делимое. |
y | Численное делитель. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
x / y, вычисленное с плавающей точкой. |
| Исключения | |
|---|---|
TypeError | Если у x и y разные типы данных. |
__rxor__
__rxor__(
y, x
)
__sub__
__sub__(
x, y
)
Возвращает x - y по элементам.
Примечание: Subtract поддерживает широковещательную передачу. Подробнее о широковещательной передаче здесь
| Аргументы | |
|---|---|
x | A Tensor. Должен быть одного из следующих типов: bfloat16, half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128, uint32. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor. Имеет тот же тип, что и x. |
__truediv__
__truediv__(
x, y
)
Делит x / y поэлементно (используя семантику оператора деления Python 3).
Примечание: Предпочтительнее использовать оператор Tensor или 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/compat/v1/Variable