Spec-Zone.ru › TensorFlow 2.3

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 с 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 используют эту коллекцию в качестве списка переменных по умолчанию для оптимизации.

Предупреждение: Объекты tf.Variable по умолчанию имеют неинтуитивную модель памяти. Переменная представлена во внутренней форме как изменяемый тензор, который может непредсказуемо ссылаться на другие тензоры в графе. Множество операций, которые потребляют переменную и могут привести к алиасингу, неопределённо и может изменяться между версиями TensorFlow. Избегайте написания кода, который полагается на изменение или неизменность значения переменной во время выполнения других операций. Например, использование объектов Variable или простых функций от них в качестве предиката в tf.cond опасно и подвержено ошибкам:
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().
Args
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) (представляющий неопределённую форму), переменной можно присвоить значения разных форм.
Raises
ValueError Если и variable_def , и initial_value указаны.
ValueError Если начальное значение не указано или не имеет формы, и validate_shape равно True.
RuntimeError Если включён режим eager execution.
Attributes
aggregation
constraint Возвращает функцию ограничения, связанную с этой переменной.
device Устройство этой переменной.
dtype Тип этой переменной.
graph Форма этой переменной.
initial_value Возвращает тензор, используемый в качестве начального значения для переменной.

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

initializer Операция инициализации для этой переменной.
name Имя этой переменной.
op Дополнительная информация о переменной.
shape Версия переменной.
synchronization
trainable

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

class SaveSliceInfo

Методы

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 и операцию присваивания в режиме графа.

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 и операцию присваивания в режиме графа.

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 и операцию присваивания в режиме графа.

batch_scatter_update

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

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

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

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

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

где

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

И выполняемая операция может быть выражена как:

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

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

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

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

count_up_to

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

count_up_to(
    limit
)

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

Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Вместо этого используйте Dataset.range.

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

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

Это по сути сокращение для count_up_to(self, limit).

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

eval

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

eval(
    session=None
)

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

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

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

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

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

experimental_ref

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

experimental_ref()

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

Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Вместо этого используйте ref().

from_proto

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

@staticmethod
from_proto(
    variable_def, import_scope=None
)

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

gather_nd

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

gather_nd(
    indices, name=None
)

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

Смотрите tf.gather_nd для деталей.

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

get_shape

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

get_shape()

Псевдоним Variable.shape.

initialized_value

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

initialized_value()

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

Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Вместо этого используйте Variable.read_value. Переменные в 2.X инициализируются автоматически как в режиме eager, так и в графическом (внутри tf.defun) контекстах.

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

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

load

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

load(
    value, session=None
)

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

Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: Используйте Variable.assign, который имеет эквивалентное поведение в версии 2.X.

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

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

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

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

read_value

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

read_value()

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

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

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

ref

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

ref()

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

Основной случай использования этого API — размещение переменных в множестве/словаре. Мы не можем помещать переменные в множество/словарь, так как 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 является Tensor ранга Q-1+P-K с формой:

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

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

v = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
indices = tf.constant([[4], [3], [1] ,[7]])
updates = tf.constant([9, 10, 11, 12])
add = v.scatter_nd_add(indices, updates)
with tf.compat.v1.Session() as sess:
  print sess.run(add)

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

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

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

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

scatter_nd_sub

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

scatter_nd_sub(
    indices, updates, name=None
)

Применяет рассыпанное вычитание к отдельным значениям или фрагментам в переменной.

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

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

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

updates является Tensor ранга Q-1+P-K с формой:

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

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

v = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
indices = tf.constant([[4], [3], [1] ,[7]])
updates = tf.constant([9, 10, 11, 12])
op = v.scatter_nd_sub(indices, updates)
with tf.compat.v1.Session() as sess:
  print sess.run(op)

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

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

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

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

scatter_nd_update

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

scatter_nd_update(
    indices, updates, name=None
)

Применяет рассыпанное присваивание к отдельным значениям или фрагментам в переменной.

Переменная имеет ранг P и indices является Tensor ранга Q.

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

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

updates является Tensor ранга Q-1+P-K с формой:

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

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

v = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
indices = tf.constant([[4], [3], [1] ,[7]])
updates = tf.constant([9, 10, 11, 12])
op = v.scatter_nd_assign(indices, updates)
with tf.compat.v1.Session() as sess:
  print sess.run(op)

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

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

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

Аргументы
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}\).
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="/api_docs/python/tf/Tensor.md#__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
)

Логическая функция И.

Операция работает для следующих типов входных данных:

  • Два одиночных элемента типа bool
  • Один tf.Tensor типа bool и один одиночный bool, где результат вычисляется путем применения логического И с одиночным элементом к каждому элементу в более крупном тензоре.
  • Два объекта tf.Tensor типа bool одинаковой формы. В этом случае результат будет представлять собой элементное логическое И двух входных тензоров.

Использование:

a = tf.constant([True])
b = tf.constant([False])
tf.math.logical_and(a, b)
<tf.Tensor: shape=(1,), dtype=bool, numpy=array([False])>
c = tf.constant([True])
x = tf.constant([False, True, True, False])
tf.math.logical_and(c, x)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False,  True,  True, False])>
y = tf.constant([False, False, True, True])
z = tf.constant([False, True, False, True])
tf.math.logical_and(y, z)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, False, False,  True])>
Аргументы
x tf.Tensor типа bool.
y tf.Tensor типа bool.
name Имя операции (необязательно).
Возвращает
tf.Tensor типа bool с размером, равным размеру x или y.

__div__

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

__div__(
    x, y
)

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

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

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

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

__eq__

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

__eq__(
    other
)

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

__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: Если индексы среза не являются целыми числами, срезами, эллипсами, 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
)

Возвращает логическое значение элемента NOT x поэлементно.

Пример:

tf.math.logical_not(tf.constant([True, False]))
<tf.Tensor: shape=(2,), dtype=bool, numpy=array([False,  True])>
Аргументы
x A Tensor типа bool. A Tensor типа bool.
name Имя операции (необязательно).
Возвращаемое значение
A Tensor типа bool.

__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. По умолчанию эти флаги равны True.

Если одна или обе матрицы содержат много нулей, можно использовать более эффективный алгоритм умножения, установив соответствующий флаг 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:

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

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

__mod__

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

__mod__(
    x, y
)

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

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

__mul__

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

__mul__(
    x, y
)

Вызывает cwise mul для "DenseDense" и "DenseSparse".

__ne__

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

__ne__(
    other
)

Сравнивает два значения по элементам на неравенство.

__neg__

__neg__(
    x, name=None
)

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

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

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

__or__

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

__or__(
    x, y
)

Возвращает значение логического ИЛИ по элементам.

Примечание: math.logical_or поддерживает вещание. Подробнее о вещании здесь
Аргументы
x Значение типа bool.
y Значение типа bool.
name Имя операции (необязательно).
Возвращает
Значение типа 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
)

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

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

This method is exposed in TensorFlow's API so that library developers
can register dispatching for <a href="/api_docs/python/tf/Tensor.md#__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
)

Функция логического И.

Операция работает для следующих типов входных данных:

  • Два одиночных элемента типа bool
  • Один tf.Tensor типа bool и один одиночный bool, где результат вычисляется путем применения логического И с одиночным элементом к каждому элементу в большем тензоре.
  • Два tf.Tensor объекта типа bool одинаковой формы. В этом случае результат будет поэлементным логическим И двух входных тензоров.

Использование:

a = tf.constant([True])
b = tf.constant([False])
tf.math.logical_and(a, b)
<tf.Tensor: shape=(1,), dtype=bool, numpy=array([False])>
c = tf.constant([True])
x = tf.constant([False, True, True, False])
tf.math.logical_and(c, x)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False,  True,  True, False])>
y = tf.constant([False, False, True, True])
z = tf.constant([False, True, False, True])
tf.math.logical_and(y, z)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, False, False,  True])>
Аргументы
x A tf.Tensor типа bool.
y A tf.Tensor типа bool.
name Имя операции (необязательно).
Возвращаемые значения
A tf.Tensor типа bool с размером, совпадающим с размером x или y.

__rdiv__

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

__rdiv__(
    y, x
)

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

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

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

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

__rfloordiv__

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

__rfloordiv__(
    y, x
)

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

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

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

Args
x Tensor числитель вещественного числового типа.
y Tensor знаменатель вещественного числового типа.
name Название операции (необязательно).
Returns
x / y с округлением вниз.
Raises
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]])
Args
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 Название операции (необязательно).
Returns
A tf.Tensor того же типа, что и a и b , где каждая внутренняя матрица является произведением соответствующих матриц в a и b, например, если все атрибуты transpose или adjoint равны False:

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

Note Это матричное произведение, а не поэлементное произведение.
Raises
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 поддерживает вещание. Подробнее о вещании здесь
Args
x A Tensor. Должен быть одного из следующих типов: int32, int64, uint64, bfloat16, half, float32, float64.
y A Tensor. Должен иметь тот же тип, что и x.
name Название операции (необязательно).
Returns
A Tensor. Имеет тот же тип, что и x.

__rmul__

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

__rmul__(
    y, x
)

Вызывает cwise mul для "DenseDense" и "DenseSparse".

__ror__

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

__ror__(
    y, x
)

Возвращает логическое ИЛИ x и y по элементам.

Примечание: math.logical_or поддерживает вещание. Подробнее о вещании здесь
Args
x A Tensor типа bool.
y A Tensor типа bool.
name Название операции (необязательно).
Returns
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]]
Args
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).

Примечание: Предпочтительно использовать оператор 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 разные типы данных.

__rxor__

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

__rxor__(
    y, x
)

Функция логического XOR.

x ^ y = (x | y) & ~(x & y)

Операция работает для следующих типов входных данных:

  • Два отдельных элемента типа bool
  • Один tf.Tensor типа bool и один отдельный bool, где результат будет вычислен путем применения логического XOR с отдельным элементом к каждому элементу в большем тензоре.
  • Два tf.Tensor объекта типа bool одинаковой формы. В этом случае результат будет логическим XOR по элементам двух тензоров на входе.

Использование:

a = tf.constant([True])
b = tf.constant([False])
tf.math.logical_xor(a, b)
<tf.Tensor: shape=(1,), dtype=bool, numpy=array([ True])>
c = tf.constant([True])
x = tf.constant([False, True, True, False])
tf.math.logical_xor(c, x)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([ True, False, False,  True])>
y = tf.constant([False, False, True, True])
z = tf.constant([False, True, False, True])
tf.math.logical_xor(y, z)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False,  True,  True, False])>
Аргументы
x A tf.Tensor type bool.
y A tf.Tensor of type bool.
name Имя операции (необязательно).
Возвращает
A tf.Tensor of type 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, 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
)

Функция логического XOR.

x ^ y = (x | y) & ~(x & y)

Операция работает для следующих типов входных данных:

  • Два отдельных элемента типа bool
  • Один tf.Tensor типа bool и один отдельный bool, где результат будет вычислен путем применения логического XOR с отдельным элементом к каждому элементу в большем тензоре.
  • Два tf.Tensor объекта типа bool одинаковой формы. В этом случае результат будет логическим XOR по элементам двух тензоров на входе.

Использование:

a = tf.constant([True])
b = tf.constant([False])
tf.math.logical_xor(a, b)
<tf.Tensor: shape=(1,), dtype=bool, numpy=array([ True])>
c = tf.constant([True])
x = tf.constant([False, True, True, False])
tf.math.logical_xor(c, x)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([ True, False, False,  True])>
y = tf.constant([False, False, True, True])
z = tf.constant([False, True, False, True])
tf.math.logical_xor(y, z)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False,  True,  True, False])>
Аргументы
x A tf.Tensor type bool.
y A tf.Tensor of type bool.
name Имя операции (необязательно).
Возвращает
A tf.Tensor of type 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/r2.3/api_docs/python/tf/compat/v1/Variable

Spec-Zone.ru

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