tf.contrib.eager.Variable
Переменная на основе дескрипторов ресурсов.
tf.contrib.eager.Variable(
initial_value=None, trainable=None, collections=None, validate_shape=True,
caching_device=None, name=None, dtype=None, variable_def=None,
import_scope=None, constraint=None, distribute_strategy=None,
synchronization=None, aggregation=None, shape=None
)
См. Руководство по переменным для общего обзора.
Переменная позволяет сохранять состояние между вызовами session.run.
Конструктор ResourceVariable требует начального значения для переменной, которое может быть тензором Tensor любого типа и формы. Начальное значение определяет тип и форму переменной. После построения тип и форма переменной фиксируются. Значение можно изменить, используя один из методов присваивания.
Как и любая Tensor, переменные, созданные с помощью tf.Variable(use_resource=True), могут использоваться в качестве входных данных для других операций в графе. Кроме того, все перегруженные операторы для класса Tensor переносятся на переменные, поэтому вы также можете добавлять узлы в граф, просто выполняя арифметические операции над переменными.
В отличие от переменной на основе ссылок, у ResourceVariable есть чётко определённая семантика. Каждое использование ResourceVariable в графе TensorFlow добавляет операцию read_value в граф. Тензоры, возвращаемые операцией read_value, гарантированно видят все изменения значения переменной, происходящие в любой операции, от которой зависит read_value (прямо, косвенно или через зависимость по управлению), и гарантированно не видят никаких изменений значения переменной от операций, которые зависят от операции read_value. Изменения от операций, не имеющих зависимостей от операции read_value, могут быть или не быть видны read_value.
Например, если в одном вызове session.run есть более одного присваивания ResourceVariable, для каждой операции, использующей значение переменной, существует чётко определённое значение, если присваивания и чтение соединены рёбрами в графе. Рассмотрим следующий пример, в котором два записи могут привести к тому, что tf.Variable и tf.ResourceVariable будут вести себя по-разному:
a = tf.Variable(1.0, use_resource=True) a.initializer.run() assign = a.assign(2.0) with tf.control_dependencies([assign]): b = a.read_value() with tf.control_dependencies([b]): other_assign = a.assign(3.0) with tf.control_dependencies([other_assign]): # Will print 2.0 because the value was read before other_assign ran. If # `a` was a tf.Variable instead, 2.0 or 3.0 could be printed. tf.compat.v1.Print(b, [b]).eval()
| Аргументы | |
|---|---|
initial_value | Тензор Tensor, или Python-объект, преобразуемый в тензор Tensor, являющийся начальным значением переменной. Также может быть вызываемой функцией без аргументов, которая возвращает начальное значение при вызове. (Обратите внимание, что функции инициализатора из init_ops.py должны быть связаны с формой перед использованием здесь.) |
trainable | Если True, по умолчанию, также добавляет переменную к коллекции графа GraphKeys.TRAINABLE_VARIABLES. Эта коллекция используется в качестве списка переменных по умолчанию, используемых классами Optimizer. По умолчанию True, если synchronization установлено в ON_READ, по умолчанию False. |
collections | Список ключей коллекций графа. Новая переменная добавляется в эти коллекции. По умолчанию [GraphKeys.GLOBAL_VARIABLES]. |
validate_shape | Игнорируется. Предоставлено для совместимости с tf.Variable. |
caching_device | Необязательная строка устройства или функция, описывающая, где переменная должна кэшироваться для чтения. По умолчанию устройство переменной. Если не None, кэшируется на другом устройстве. Типичное использование — кэширование на устройстве, на котором находятся операции, использующие переменную, чтобы избежать дублирования копирования через Switch и другие условные операторы. |
name | Необязательное имя переменной. По умолчанию 'Variable' и автоматически получает уникальное имя. |
dtype | Если установлено, initial_value будет преобразовано в указанный тип. Если None, тип данных будет сохранён (если initial_value является тензором) или будет использован float32 (если это Python-объект, преобразуемый в тензор). |
variable_def | VariableDef протокол буфера. Если не None, пересоздаёт объект ResourceVariable со своим содержимым. variable_def и другие аргументы (кроме import_scope) взаимоисключающие. |
import_scope | Необязательная область имени. Область имени, добавляемая к ResourceVariable. Используется только тогда, когда указан variable_def. |
constraint | Необязательная функция проекции, применяемая к переменной после обновления операцией Optimizer (например, используется для реализации ограничений нормы или ограничений значений для весов слоя). Функция должна принимать в качестве входного значения тензор, представляющий значение переменной, и возвращать тензор для проецируемого значения (которое должно иметь ту же форму). Ограничения небезопасны при использовании в асинхронном распределённом обучении. |
distribute_strategy | tf.distribute.Strategy, внутри которого создаётся эта переменная. |
synchronization | Указывает, когда распределённая переменная будет агрегироваться. Допустимые значения — константы, определённые в классе tf.VariableSynchronization. По умолчанию синхронизация установлена в AUTO и текущий DistributionStrategy выбирает, когда синхронизироваться. |
aggregation | Указывает, как распределённая переменная будет агрегироваться. Допустимые значения — константы, определённые в классе tf.VariableAggregation. |
shape | (необязательно) Форма этой переменной. Если None, используется форма initial_value. При установке этого аргумента в tf.TensorShape(None) (представляющий неопределённую форму), переменной можно присвоить значения различной формы. |
| Исключения | |
|---|---|
ValueError | Если начальное значение не указано или не имеет формы, и validate_shape равно True. |
| Атрибуты | |
|---|---|
aggregation | |
constraint | Возвращает функцию ограничения, связанную с этой переменной. |
create | Операция, ответственная за инициализацию этой переменной. |
device | Устройство, на котором находится эта переменная. |
dtype | Тип данных этой переменной. |
graph | Форма этой переменной. |
handle | Дескриптор, с помощью которого можно получить доступ к этой переменной. |
initial_value | Возвращает тензор, используемый в качестве начального значения для переменной. |
initializer | Операция, ответственная за инициализацию этой переменной. |
name | Имя дескриптора для этой переменной. |
op | Операция для этой переменной. |
shape | Форма этой переменной. |
synchronization | |
trainable | |
Подклассы
Методы
assign
assign(
value, use_locking=None, name=None, read_value=True
)
Присваивает новое значение этой переменной.
| Аргументы | |
|---|---|
value | Тензор Tensor. Новое значение для этой переменной. |
use_locking | Если True, использовать блокировку во время присваивания. |
name | Имя для присваивания. |
read_value | Тензор bool. Читать и возвращать новое значение переменной или нет. |
| Возвращает | |
|---|---|
Если read_value равно True, этот метод вернёт новое значение переменной после завершения присваивания. В противном случае, в режиме графа вернёт операцию Operation, выполняющую присваивание, а в режиме eager — None. |
assign_add
assign_add(
delta, use_locking=None, name=None, read_value=True
)
Добавляет значение к этой переменной.
| Аргументы | |
|---|---|
delta | Тензор Tensor. Значение для добавления к этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | Имя для операции. |
read_value | Тензор bool. Читать и возвращать новое значение переменной или нет. |
| Возвращает | |
|---|---|
Если read_value равно True, этот метод вернёт новое значение переменной после завершения присваивания. В противном случае, в режиме графа вернёт операцию Operation, выполняющую присваивание, а в режиме eager — None. |
assign_sub
assign_sub(
delta, use_locking=None, name=None, read_value=True
)
Вычитает значение из этой переменной.
| Аргументы | |
|---|---|
delta | Переменная. Значение, которое нужно вычесть из этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | Имя для операции. |
read_value | Переменная. Нужно ли читать и возвращать новое значение переменной? |
| Возвращаемое значение | |
|---|---|
Если read_value является True, этот метод вернёт новое значение переменной после завершения присваивания. В противном случае, в режиме графа он вернёт Operation выполняющий присваивание, а в режиме жадного режима - None. |
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 | имя операции. |
| Возвращаемое значение | |
|---|---|
Tensor содержащий новое значение этой переменной после завершения операции рассредоточенного вычитания. |
| Исключения | |
|---|---|
TypeError | если sparse_delta не является IndexedSlices. |
count_up_to
count_up_to(
limit
)
Увеличивает переменную, пока она не достигнет значения limit. (устарело)
При выполнении этой операции она пытается увеличить переменную на 1. Если увеличение переменной приведёт к значению большему, чем limit, операция вызывает исключение OutOfRangeError.
Если ошибка не возникнет, операция выводит значение переменной до увеличения.
Это по сути сокращение для count_up_to(self, limit).
| Аргументы | |
|---|---|
limit | значение, при котором увеличение переменной вызывает ошибку. |
| Возвращаемое значение | |
|---|---|
Tensor содержащий значение переменной до увеличения. Если ни одна другая операция не изменяет эту переменную, все производимые значения будут разными. |
eval
eval(
session=None
)
Вычисляет и возвращает значение этой переменной.
experimental_ref
experimental_ref()
Возвращает хешируемый объект ссылки на эту переменную.
Основное применение этого API - размещение переменных в множестве/словаре. Мы не можем помещать переменные в множество/словарь, так как variable.__hash__() больше недоступно начиная с Tensorflow 2.0.
import tensorflow as tf
x = tf.Variable(5)
y = tf.Variable(10)
z = tf.Variable(10)
# The followings will raise an exception starting 2.0
# TypeError: Variable is unhashable if Variable equality is enabled.
variable_set = {x, y, z}
variable_dict = {x: 'five', y: 'ten'}
Вместо этого можно использовать variable.experimental_ref().
variable_set = {x.experimental_ref(),
y.experimental_ref(),
z.experimental_ref()}
print(x.experimental_ref() in variable_set)
==> True
variable_dict = {x.experimental_ref(): 'five',
y.experimental_ref(): 'ten',
z.experimental_ref(): 'ten'}
print(variable_dict[y.experimental_ref()])
==> ten
Кроме того, объект ссылки предоставляет функцию .deref() , которая возвращает исходную переменную.
x = tf.Variable(5) print(x.experimental_ref().deref()) ==> <tf.Variable 'Variable:0' shape=() dtype=int32, numpy=5>
from_proto
@staticmethod
from_proto(
variable_def, import_scope=None
)
Возвращает объект Variable, созданный из variable_def.
gather_nd
gather_nd(
indices, name=None
)
Читает значение этой переменной в виде разреженных данных, используя gather_nd.
get_shape
get_shape()
Псевдоним для Variable.shape.
initialized_value
initialized_value()
Возвращает значение инициализированной переменной. (устарело)
Используйте её вместо самой переменной для инициализации другой переменной со значением, зависящим от значения этой переменной.
# Initialize 'v' with a random tensor. v = tf.Variable(tf.random.truncated_normal([10, 40])) # Use `initialized_value` to guarantee that `v` has been # initialized before its value is used to initialize `w`. # The random values are picked only once. w = tf.Variable(v.initialized_value() * 2.0)
| Возвращаемое значение | |
|---|---|
Tensor содержащий значение этой переменной после запуска её инициализатора. |
is_initialized
is_initialized(
name=None
)
Проверяет, была ли инициализирована переменная ресурса.
Выводит булево скалярное значение, указывающее, была ли тензор инициализирован.
| Аргументы | |
|---|---|
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Tensor типа bool. |
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 | Сессия не передана и нет стандартной сессии. |
numpy
numpy()
read_value
read_value()
Создаёт операцию, которая считывает значение этой переменной.
Следует использовать, когда требуется несколько чтений или когда желательно читать значение только после того, как выполнится какое-либо условие.
| Возвращаемое значение | |
|---|---|
| операция чтения. |
scatter_add
scatter_add(
sparse_delta, use_locking=False, name=None
)
Добавляет tf.IndexedSlices к этой переменной.
| Аргументы | |
|---|---|
sparse_delta | tf.IndexedSlices для добавления к этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | имя операции. |
| Возвращаемое значение | |
|---|---|
Значение Tensor, которое будет содержать новое значение этой переменной после завершения операции разбросанного сложения. |
| Исключения | |
|---|---|
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 | имя операции. |
| Возвращаемое значение | |
|---|---|
Значение Tensor, которое будет содержать новое значение этой переменной после завершения операции разбросанного деления. |
| Исключения | |
|---|---|
TypeError | если sparse_delta не является IndexedSlices. |
scatter_max
scatter_max(
sparse_delta, use_locking=False, name=None
)
Обновляет эту переменную максимальным значением из tf.IndexedSlices и её текущего значения.
| Аргументы | |
|---|---|
sparse_delta | tf.IndexedSlices для использования в операции нахождения максимума с этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | имя операции. |
| Возвращаемое значение | |
|---|---|
Значение Tensor, которое будет содержать новое значение этой переменной после завершения операции разбросанного нахождения максимума. |
| Исключения | |
|---|---|
TypeError | если sparse_delta не является IndexedSlices. |
scatter_min
scatter_min(
sparse_delta, use_locking=False, name=None
)
Обновляет эту переменную минимальным значением из tf.IndexedSlices и её текущего значения.
| Аргументы | |
|---|---|
sparse_delta | tf.IndexedSlices для использования в операции нахождения минимума с этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | имя операции. |
| Возвращаемое значение | |
|---|---|
Значение Tensor, которое будет содержать новое значение этой переменной после завершения операции разбросанного нахождения минимума. |
| Исключения | |
|---|---|
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 | имя операции. |
| Возвращаемое значение | |
|---|---|
Значение Tensor, которое будет содержать новое значение этой переменной после завершения операции разбросанного умножения. |
| Исключения | |
|---|---|
TypeError | если sparse_delta не является IndexedSlices. |
scatter_nd_add
scatter_nd_add(
indices, updates, name=None
)
Применяет разбросанное сложение к отдельным значениям или срезам в переменной.
ref — это Tensor с рангом P, а indices — это Tensor ранга Q.
indices должно быть целочисленным тензором, содержащим индексы в ref. Его форма должна быть [d_0, ..., d_{Q-2}, K], где 0 < K <= P.
Внутреннее измерение indices (длиной K) соответствует индексам к элементам (если K = P) или срезам (если K < P) вдоль K-го измерения ref.
updates — это Tensor ранга Q-1+P-K с формой:
[d_0, ..., d_{Q-2}, ref.shape[K], ..., ref.shape[P-1]].
Например, скажем, мы хотим добавить 4 разбросанных элемента к тензору ранга 1 к 8 элементам. На Python этот обновление будет выглядеть так:
ref = 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 = ref.scatter_nd_add(indices, updates) with tf.compat.v1.Session() as sess: print sess.run(add)
Результат обновления ref будет таким:
[1, 13, 3, 14, 14, 6, 7, 20]
См. tf.scatter_nd для получения более подробной информации о том, как выполнять обновления срезов.
| Аргументы | |
|---|---|
indices | Индексы, используемые в операции. |
updates | Значения, используемые в операции. |
name | Имя операции. |
| Возвращаемое значение | |
|---|---|
Значение Tensor, которое будет содержать новое значение этой переменной после завершения операции разбросанного вычитания. |
scatter_nd_sub
scatter_nd_sub(
indices, updates, name=None
)
Применяет разбросанное вычитание к отдельным значениям или срезам в переменной.
ref — это Tensor с рангом P, а indices — это Tensor ранга Q.
indices должно быть целочисленным тензором, содержащим индексы в ref. Его форма должна быть [d_0, ..., d_{Q-2}, K], где 0 < K <= P.
Внутреннее измерение indices (длиной K) соответствует индексам к элементам (если K = P) или срезам (если K < P) вдоль K-го измерения ref.
updates — это Tensor ранга Q-1+P-K с формой:
[d_0, ..., d_{Q-2}, ref.shape[K], ..., ref.shape[P-1]].
Например, скажем, мы хотим добавить 4 разбросанных элемента к тензору ранга 1 к 8 элементам. На Python этот обновление будет выглядеть так:
ref = 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 = ref.scatter_nd_sub(indices, updates) with tf.compat.v1.Session() as sess: print sess.run(op)
Результат обновления ref будет таким:
[1, -9, 3, -6, -6, 6, 7, -4]
См. tf.scatter_nd для получения более подробной информации о том, как выполнять обновления срезов.
| Аргументы | |
|---|---|
indices | Индексы, используемые в операции. |
updates | Значения, используемые в операции. |
name | Имя операции. |
| Возвращаемое значение | |
|---|---|
Значение Tensor, которое будет содержать новое значение этой переменной после завершения операции разбросанного вычитания. |
scatter_nd_update
scatter_nd_update(
indices, updates, name=None
)
Применяет разреженное присваивание к отдельным значениям или срезам в переменной.
ref — это Tensor с рангом P, а indices — это Tensor ранга Q.
indices должно быть целочисленным тензором, содержащим индексы в ref. Его форма должна быть [d_0, ..., d_{Q-2}, K], где 0 < K <= P.
Наивнутренний размер indices (длиной K) соответствует индексам элементов (если K = P) или срезов (если K < P) вдоль K-го измерения ref.
updates — это Tensor ранга Q-1+P-K с формой:
[d_0, ..., d_{Q-2}, ref.shape[K], ..., ref.shape[P-1]].
Например, предположим, что мы хотим добавить 4 рассеянных элемента к тензору ранга-1 к 8 элементам. В Python это обновление будет выглядеть так:
ref = 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 = ref.scatter_nd_update(indices, updates) with tf.compat.v1.Session() as sess: print sess.run(op)
Результирующее обновление ref будет выглядеть так:
[1, 11, 3, 10, 9, 6, 7, 12]
См. tf.scatter_nd для получения более подробной информации о способах обновления срезов.
| Аргументы | |
|---|---|
indices | Индексы, которые будут использоваться в операции. |
updates | Значения, которые будут использоваться в операции. |
name | Название операции. |
| Возвращаемое значение | |
|---|---|
Tensor, который будет содержать новое значение этой переменной после завершения рассеянного вычитания. |
scatter_sub
scatter_sub(
sparse_delta, use_locking=False, name=None
)
Вычитает tf.IndexedSlices из этой переменной.
| Аргументы | |
|---|---|
sparse_delta | tf.IndexedSlices, которые нужно вычесть из этой переменной. |
use_locking | Если True, использовать блокировку во время операции. |
name | Название операции. |
| Возвращаемое значение | |
|---|---|
Tensor, который будет содержать новое значение этой переменной после завершения рассеянного вычитания. |
| Исключения | |
|---|---|
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 | Название операции. |
| Возвращаемое значение | |
|---|---|
Tensor, который будет содержать новое значение этой переменной после завершения рассеянного вычитания. |
| Исключения | |
|---|---|
TypeError | если sparse_delta не является IndexedSlices. |
set_shape
set_shape(
shape
)
Не поддерживается.
sparse_read
sparse_read(
indices, name=None
)
Считывает значение этой переменной разреженно, используя gather.
to_proto
to_proto(
export_scope=None
)
Преобразует ResourceVariable в протокольный буфер VariableDef.
| Аргументы | |
|---|---|
export_scope | Необязательный string. Область именования для удаления. |
| Исключения | |
|---|---|
RuntimeError | Если выполняется в режиме EAGER. |
| Возвращаемое значение | |
|---|---|
Протокольный буфер VariableDef, или None, если Variable не находится в указанной области именования. |
value
value()
Кэшированная операция, которая считывает значение этой переменной.
__abs__
__abs__(
x, name=None
)
Вычисляет абсолютное значение тензора.
Для тензора целых или вещественных значений эта операция возвращает тензор того же типа, где каждый элемент содержит абсолютное значение соответствующего элемента на входе.
Для тензора x комплексных чисел эта операция возвращает тензор типа float32 или float64, который представляет собой абсолютное значение каждого элемента в x. Все элементы в x должны быть комплексными числами вида \(a + bj\). Абсолютное значение вычисляется как \( \sqrt{a^2 + b^2}\). Например:
x = tf.constant([[-2.25 + 4.75j], [-3.25 + 5.75j]]) tf.abs(x) # [5.25594902, 6.60492229]
| Аргументы | |
|---|---|
x | Tensor или SparseTensor типа float16, float32, float64, int32, int64, complex64 или complex128. |
name | Название операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Tensor или SparseTensor той же размерности, типа и разреженности, что и x с абсолютными значениями. Обратите внимание, для complex64 или complex128 ввода, возвращаемый Tensor будет типа float32 или float64 соответственно. |
__add__
__add__(
x, y
)
Перенаправляет на add для строк и add_v2 для всех других типов.
__and__
__and__(
x, y
)
Возвращает логическое И x и y поэлементно.
Примечание: math.logical_and поддерживает вещание. Подробнее о вещании здесь
| Аргументы | |
|---|---|
x | Tensor типа bool. |
y | Tensor типа bool. |
name | Название операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Tensor типа bool. |
__bool__
__bool__()
__div__
__div__(
x, y
)
Делит два значения с использованием семантики Python 2.
Используется для Tensor.div.
| Аргументы | |
|---|---|
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)) для чисел с плавающей точкой, чтобы результат всегда был целым (хотя, возможно, целым числом, представленным как число с плавающей точкой). Этот оператор создаётся оператором 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 | Объект 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 | Объект ops.Variable . |
slice_spec | Аргументы для Tensor.getitem. |
| Возвращает | |
|---|---|
Соответствующий срез "тензора" на основе "slice_spec". Как оператор. У оператора также есть метод assign(), который можно использовать для генерации оператора присвоения. |
| Исключения | |
|---|---|
ValueError | Если размер диапазона среза отрицательный. |
TypeError | TypeError: Если индексы среза не являются целыми числами, срезами, эллипсами, tf.newaxis или тензорами типа int32/int64. |
__gt__
__gt__(
x, y, name=None
)
Возвращает логическое значение (x > y) поэлементно.
Примечание: math.greater поддерживает векторизацию. Подробнее о векторизации здесь
| Аргументы | |
|---|---|
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
)
Возвращает логическое значение НЕ x поэлементно.
| Аргументы | |
|---|---|
x | Объект Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Объект Tensor типа bool. |
__iter__
__iter__()
Метод-заглушка для предотвращения итерации.
Не вызывать.
ПРИМЕЧАНИЕ(mrry): Если мы регистрируем getitem как перегруженный оператор, Python попытается итерироваться по тензору переменной от 0 до бесконечности. Объявление этого метода предотвращает это непреднамеренное поведение.
| Исключения | |
|---|---|
TypeError | при вызове. |
__le__
__le__(
x, y, name=None
)
Возвращает логическое значение (x <= y) поэлементно.
Примечание: math.less_equal поддерживает векторизацию. Подробнее о векторизации здесь
| Аргументы | |
|---|---|
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 | Объект Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64. |
y | Объект 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 tensor `a`
# [[1, 2, 3],
# [4, 5, 6]]
a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3])
# 2-D tensor `b`
# [[ 7, 8],
# [ 9, 10],
# [11, 12]]
b = tf.constant([7, 8, 9, 10, 11, 12], shape=[3, 2])
# `a` * `b`
# [[ 58, 64],
# [139, 154]]
c = tf.matmul(a, b)
# 3-D tensor `a`
# [[[ 1, 2, 3],
# [ 4, 5, 6]],
# [[ 7, 8, 9],
# [10, 11, 12]]]
a = tf.constant(np.arange(1, 13, dtype=np.int32),
shape=[2, 2, 3])
# 3-D tensor `b`
# [[[13, 14],
# [15, 16],
# [17, 18]],
# [[19, 20],
# [21, 22],
# [23, 24]]]
b = tf.constant(np.arange(13, 25, dtype=np.int32),
shape=[2, 3, 2])
# `a` * `b`
# [[[ 94, 100],
# [229, 244]],
# [[508, 532],
# [697, 730]]]
c = tf.matmul(a, b)
# Since python >= 3.5 the @ operator is supported (see PEP 465).
# In TensorFlow, it simply calls the `tf.matmul()` function, so the
# following lines are equivalent:
d = a @ b @ [[10.], [11.]]
d = tf.matmul(tf.matmul(a, b), [[10.], [11.]])
| Аргументы | |
|---|---|
a | A Tensor типа float16, float32, float64, int32, complex64, complex128 и ранга > 1. |
b | A Tensor того же типа и ранга, что и a. |
transpose_a | Если True, то a транспонируется перед умножением. |
transpose_b | Если True, то b транспонируется перед умножением. |
adjoint_a | Если True, то a сопряжённо транспонируется перед умножением. |
adjoint_b | Если True, то b сопряжённо транспонируется перед умножением. |
a_is_sparse | Если True, то a обрабатывается как разреженная матрица. |
b_is_sparse | Если True, то b обрабатывается как разреженная матрица. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor того же типа, что и a и b , где каждая внутренняя матрица является произведением соответствующих матриц в a и b, например, если все атрибуты транспонирования или сопряжения False:
| |
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, 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, int32, int64, complex64, complex128. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor. Имеет тот же тип, что и x. |
__nonzero__
__nonzero__()
__or__
__or__(
x, y
)
Возвращает логическое ИЛИ x и y поэлементно.
Примечание: math.logical_or поддерживает вещание. Подробнее о вещании см. здесь
| Аргументы | |
|---|---|
x | A Tensor типа bool. |
y | A Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor типа bool. |
__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
)
Вызывает add для строк и add_v2 для всех других типов.
__rand__
__rand__(
y, x
)
Возвращает логическое И x и y поэлементно.
Примечание: math.logical_and поддерживает вещание. Подробнее о вещании здесь
| Аргументы | |
|---|---|
x | A Tensor типа bool. |
y | A Tensor типа bool. |
name | Название операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor типа bool. |
__rdiv__
__rdiv__(
y, x
)
Делит два значения, используя семантику Python 2.
Используется для Tensor.div.
| Аргументы | |
|---|---|
x | Tensor числитель вещественного числового типа. |
y | Tensor знаменатель вещественного числового типа. |
name | Название операции (необязательно). |
| Возвращаемое значение | |
|---|---|
x / y возвращает частное x и y. |
__rfloordiv__
__rfloordiv__(
y, x
)
Делит элементы попарно, округляя в сторону наименьшего целого.
То же самое, что и 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 | Если входные данные комплексные. |
__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 tensor `a`
# [[1, 2, 3],
# [4, 5, 6]]
a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3])
# 2-D tensor `b`
# [[ 7, 8],
# [ 9, 10],
# [11, 12]]
b = tf.constant([7, 8, 9, 10, 11, 12], shape=[3, 2])
# `a` * `b`
# [[ 58, 64],
# [139, 154]]
c = tf.matmul(a, b)
# 3-D tensor `a`
# [[[ 1, 2, 3],
# [ 4, 5, 6]],
# [[ 7, 8, 9],
# [10, 11, 12]]]
a = tf.constant(np.arange(1, 13, dtype=np.int32),
shape=[2, 2, 3])
# 3-D tensor `b`
# [[[13, 14],
# [15, 16],
# [17, 18]],
# [[19, 20],
# [21, 22],
# [23, 24]]]
b = tf.constant(np.arange(13, 25, dtype=np.int32),
shape=[2, 3, 2])
# `a` * `b`
# [[[ 94, 100],
# [229, 244]],
# [[508, 532],
# [697, 730]]]
c = tf.matmul(a, b)
# Since python >= 3.5 the @ operator is supported (see PEP 465).
# In TensorFlow, it simply calls the `tf.matmul()` function, so the
# following lines are equivalent:
d = a @ b @ [[10.], [11.]]
d = tf.matmul(tf.matmul(a, b), [[10.], [11.]])
| Аргументы | |
|---|---|
a | Tensor типа float16, float32, float64, int32, complex64, complex128 и ранга > 1. |
b | Tensor с тем же типом и рангом, что и a. |
transpose_a | Если True, то a транспонируется перед умножением. |
transpose_b | Если True, то b транспонируется перед умножением. |
adjoint_a | Если True, то a сопряжённо транспонируется перед умножением. |
adjoint_b | Если True, то b сопряжённо транспонируется перед умножением. |
a_is_sparse | Если True, то a рассматривается как разреженная матрица. |
b_is_sparse | Если True, то b рассматривается как разреженная матрица. |
name | Название операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor того же типа, что и a и b, где каждая внутренняя матрица является произведением соответствующих матриц в a и b, например, если все атрибуты transpoze или adjoint — False:
| |
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 | A Tensor. Должен быть одного из следующих типов: int32, int64, bfloat16, half, float32, float64. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Название операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor. Имеет тот же тип, что и x. |
__rmul__
__rmul__(
y, x
)
Отправляет cwise mul для "DenseDense" и "DenseSparse".
__ror__
__ror__(
y, x
)
Возвращает логическое значение x OR y поэлементно.
Примечание: math.logical_or поддерживает вещание. Подробнее о вещании здесь
| Аргументы | |
|---|---|
x | A Tensor типа bool. |
y | A Tensor типа bool. |
name | Название операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor типа bool. |
__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. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor. Имеет тот же тип, что и x. |
__rtruediv__
__rtruediv__(
y, x
)
__rxor__
__rxor__(
y, x
)
Логическая функция XOR.
x ^ y = (x | y) & ~(x & y)
На вход подаются тензоры, и если тензоры содержат более одного элемента, вычисляется поэлементное логическое XOR.
Использование:
x = tf.constant([False, False, True, True], dtype = tf.bool) y = tf.constant([False, True, False, True], dtype = tf.bool) z = tf.logical_xor(x, y, name="LogicalXor") # here z = [False True True False]
| Аргументы | |
|---|---|
x | A Tensor типа bool. |
y | A Tensor типа bool. |
| Возвращаемое значение | |
|---|---|
A Tensor типа bool с размером, совпадающим с размером x или y. |
__sub__
__sub__(
x, y
)
Возвращает x - y поэлементно.
Примечание: Subtract поддерживает вещание. Подробнее о вещании здесь
| Аргументы | |
|---|---|
x | A Tensor. Должен быть одного из следующих типов: bfloat16, half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor. Имеет тот же тип, что и x. |
__truediv__
__truediv__(
x, y
)
__xor__
__xor__(
x, y
)
Логическая функция XOR.
x ^ y = (x | y) & ~(x & y)
На вход подаются тензоры, и если тензоры содержат более одного элемента, вычисляется поэлементное логическое XOR.
Использование:
x = tf.constant([False, False, True, True], dtype = tf.bool) y = tf.constant([False, True, False, True], dtype = tf.bool) z = tf.logical_xor(x, y, name="LogicalXor") # here z = [False True True False]
| Аргументы | |
|---|---|
x | A Tensor типа bool. |
y | A Tensor типа bool. |
| Возвращаемое значение | |
|---|---|
A Tensor типа bool с размером, совпадающим с размером 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/r1.15/api_docs/python/tf/contrib/eager/Variable