tf.compat.v1.Variable
См. руководство по переменным.
Наследует: Variable
tf.compat.v1.Variable(
initial_value=None,
trainable=None,
collections=None,
validate_shape=True,
caching_device=None,
name=None,
variable_def=None,
dtype=None,
expected_shape=None,
import_scope=None,
constraint=None,
use_resource=None,
synchronization=tf.VariableSynchronization.AUTO,
aggregation=tf.compat.v1.VariableAggregation.NONE,
shape=None
)
Используется в блокнотах
| Используется в учебных материалах |
|---|
Переменная сохраняет состояние в графе между вызовами run(). Добавить переменную в граф можно, создав экземпляр класса Variable.
Конструктору Variable() требуется начальное значение переменной, которым может быть Tensor любого типа и формы. Начальное значение определяет тип и форму переменной. После создания тип и форма переменной фиксируются. Значение можно изменить с помощью одного из методов assign.
Чтобы позднее изменить форму переменной, необходимо использовать операцию assign с validate_shape=False.
Как и любой Tensor, переменные, созданные с помощью Variable(), можно использовать в качестве входных данных для других Ops в графе. Кроме того, все перегруженные операторы класса 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)
После запуска графа переменные необходимо явно инициализировать, прежде чем выполнять Ops, использующие их значения. Инициализировать переменную можно, выполнив ее операцию-инициализатор, восстановив переменную из файла сохранения или просто выполнив операцию assign, которая присваивает переменной значение. Фактически операция-инициализатор переменной — это просто операция assign, которая присваивает переменной ее начальное значение.
# Launch the graph in a session.
with tf.compat.v1.Session() as sess:
# Run the variable initializer.
sess.run(w.initializer)
# ...you now can run ops that use the value of 'w'...
Чаще всего для инициализации используют вспомогательную функцию global_variables_initializer(), которая добавляет в граф операцию инициализации всех переменных. Затем эту операцию выполняют после запуска графа.
# Add an Op to initialize global variables.
init_op = tf.compat.v1.global_variables_initializer()
# Launch the graph in a session.
with tf.compat.v1.Session() as sess:
# Run the Op that initializes global variables.
sess.run(init_op)
# ...you can now run any Op that uses variable values...
Если необходимо создать переменную с начальным значением, зависящим от другой переменной, используйте initialized_value() этой переменной. Это гарантирует правильный порядок инициализации переменных.
Все переменные автоматически собираются в графе, в котором они созданы. По умолчанию конструктор добавляет новую переменную в коллекцию графа GraphKeys.GLOBAL_VARIABLES. Вспомогательная функция global_variables() возвращает содержимое этой коллекции.
При создании модели машинного обучения часто удобно различать переменные, хранящие обучаемые параметры модели, и другие переменные, например переменную global step для подсчета шагов обучения. Для этого в конструкторе переменной предусмотрен параметр trainable=<bool>. Если True, новая переменная также добавляется в коллекцию графа GraphKeys.TRAINABLE_VARIABLES. Вспомогательная функция trainable_variables() возвращает содержимое этой коллекции. Различные классы Optimizer используют эту коллекцию как список переменных для оптимизации по умолчанию.
v = tf.Variable(True) tf.cond(v, lambda: v.assign(False), my_false_fn) # Note: this is broken.
В этом случае добавление use_resource=True при создании переменной устраняет проблемы недетерминированности:
v = tf.Variable(True, use_resource=True) tf.cond(v, lambda: v.assign(False), my_false_fn)
Чтобы использовать замену переменных, лишенную этих проблем:
- Добавьте
use_resource=Trueпри созданииtf.Variable; - Вызовите
tf.compat.v1.get_variable_scope().set_use_resource(True)внутриtf.compat.v1.variable_scopeперед вызовомtf.compat.v1.get_variable().
| Аргументы | |
|---|---|
initial_value | Tensor или объект Python, преобразуемый в Tensor, который задает начальное значение Variable. Для начального значения должна быть указана форма, если только для 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 | Необязательная строка устройства, описывающая, где следует кэшировать Variable для чтения. По умолчанию используется устройство Variable. Если значение не None, кэширование выполняется на другом устройстве. Обычно кэш размещают на устройстве, где находятся Ops, использующие Variable, чтобы избежать повторного копирования через Switch и другие условные операторы. |
name | Необязательное имя переменной. По умолчанию используется 'Variable'; уникальность имени обеспечивается автоматически. |
variable_def | Протокол-буфер VariableDef. Если значение не None, объект Variable создается заново с его содержимым и ссылками на узлы переменной в графе, которые уже должны существовать. Граф не изменяется. variable_def и другие аргументы нельзя использовать одновременно. |
dtype | Если задано, initial_value преобразуется к указанному типу. Если задано None, тип данных сохраняется (если initial_value — это Tensor) либо определяется с помощью convert_to_tensor. |
expected_shape | TensorShape. Если задано, ожидается, что initial_value будет иметь эту форму. |
import_scope | Необязательный string. Область имен, добавляемая к Variable.. Используется только при инициализации из протокол-буфера. |
constraint | Необязательная функция проекции, применяемая к переменной после ее обновления с помощью Optimizer (например, для реализации ограничений нормы или значения весов слоя). Функция должна принимать на вход непроецированный Tensor, представляющий значение переменной, и возвращать Tensor с проецированным значением (той же формы). Ограничения небезопасно использовать при асинхронном распределенном обучении. |
use_resource | Определяет, следует ли использовать переменные ресурсов. |
synchronization | Указывает, когда будет выполняться агрегирование распределенной переменной. Допустимые значения — константы, определенные в классе tf.VariableSynchronization. По умолчанию для синхронизации установлено значение AUTO, а момент синхронизации выбирает текущий DistributionStrategy. |
aggregation | Указывает, как будет выполняться агрегирование распределенной переменной. Допустимые значения — константы, определенные в классе tf.VariableAggregation. |
shape | (необязательно) Форма этой переменной. Если None, используется форма initial_value. Если для этого аргумента задано значение tf.TensorShape(None) (обозначающее неопределенную форму), переменной можно присваивать значения с разными формами. |
| Вызывает исключения | |
|---|---|
ValueError | Если заданы и variable_def, и initial_value. |
ValueError | Если начальное значение не указано или не имеет формы, а validate_shape равно True. |
RuntimeError | Если включен режим eager execution. |
| Атрибуты | |
|---|---|
aggregation | |
constraint | Возвращает функцию-ограничение, связанную с этой переменной. |
device | Устройство этой переменной. |
dtype | DType этой переменной. |
graph | Graph этой переменной. |
initial_value | Возвращает Tensor, используемый в качестве начального значения переменной. Обратите внимание: он отличается от |
initializer | Операция инициализации этой переменной. |
name | Имя этой переменной. |
op | Operation этой переменной. |
shape | TensorShape этой переменной. |
synchronization | |
trainable | |
Дочерние классы
Методы
assign
assign(
value, use_locking=False, name=None, read_value=True
)
Присваивает переменной новое значение.
По существу, это сокращенная запись для assign(self, value).
| Аргументы | |
|---|---|
value | Tensor. Новое значение этой переменной. |
use_locking | Если True, при присваивании используется блокировка. |
name | Имя создаваемой операции |
read_value | Если True, возвращает объект, вычисление которого дает новое значение переменной; если False, возвращает операцию assign. |
| Возвращает | |
|---|---|
Обновленная переменная. Если read_value равно false, вместо этого возвращает None в режиме Eager и операцию assign в режиме графа. |
assign_add
assign_add(
delta, use_locking=False, name=None, read_value=True
)
Прибавляет значение к этой переменной.
По существу, это сокращенная запись для assign_add(self, delta).
| Аргументы | |
|---|---|
delta | Tensor. Значение, которое нужно прибавить к этой переменной. |
use_locking | Если True, при выполнении операции используется блокировка. |
name | Имя создаваемой операции |
read_value | Если True, возвращает объект, вычисление которого дает новое значение переменной; если False, возвращает операцию assign. |
| Возвращает | |
|---|---|
Обновленная переменная. Если read_value равно false, вместо этого возвращает None в режиме Eager и операцию assign в режиме графа. |
assign_sub
assign_sub(
delta, use_locking=False, name=None, read_value=True
)
Вычитает значение из этой переменной.
По существу, это сокращенная запись для assign_sub(self, delta).
| Аргументы | |
|---|---|
delta | Tensor. Значение, которое нужно вычесть из этой переменной. |
use_locking | Если True, при выполнении операции используется блокировка. |
name | Имя создаваемой операции |
read_value | Если True, возвращает объект, вычисление которого дает новое значение переменной; если False, возвращает операцию assign. |
| Возвращает | |
|---|---|
Обновленная переменная. Если read_value равно false, вместо этого возвращает None в режиме Eager и операцию assign в режиме графа. |
batch_scatter_update
batch_scatter_update(
sparse_delta, use_locking=False, name=None
)
Пакетно присваивает этой переменной значения tf.IndexedSlices.
Аналогично batch_gather. Предполагается, что эта переменная и разреженный IndexedSlices sparse_delta имеют последовательность начальных измерений, совпадающих у всех них, а обновления выполняются по последнему измерению indices. Иными словами, измерения должны иметь следующий вид:
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. (Устарело.)
При выполнении этой операции предпринимается попытка увеличить переменную на 1. Если в результате значение переменной превысит limit, операция вызовет исключение OutOfRangeError.
Если ошибка не возникает, операция выводит значение переменной до увеличения.
По существу, это сокращенная запись для count_up_to(self, limit).
| Аргументы | |
|---|---|
limit | Значение, при достижении которого увеличение переменной вызывает ошибку. |
| Возвращает | |
|---|---|
Tensor, содержащий значение переменной до увеличения. Если никакая другая операция не изменяет эту переменную, все полученные значения будут различными. |
eval
eval(
session=None
)
В сеансе вычисляет и возвращает значение этой переменной.
Этот метод не создает граф: он не добавляет в него Ops.
Для этого вспомогательного метода необходим сеанс, в котором запущен граф с этой переменной. Если сеанс не передан, используется сеанс по умолчанию. Подробнее о запуске графа и сеансах см. в разделе tf.compat.v1.Session.
v = tf.Variable([1, 2])
init = tf.compat.v1.global_variables_initializer()
with tf.compat.v1.Session() as sess:
sess.run(init)
# Usage passing the session explicitly.
print(v.eval(sess))
# Usage with the default session. The 'with' block
# above makes 'sess' the default session.
print(v.eval())
| Аргументы | |
|---|---|
session | Сеанс, используемый для вычисления этой переменной. Если он не указан, используется сеанс по умолчанию. |
| Возвращает | |
|---|---|
Объект numpy ndarray с копией значения этой переменной. |
experimental_ref
experimental_ref()
УСТАРЕВШАЯ ФУНКЦИЯ
from_proto
@staticmethod
from_proto(
variable_def, import_scope=None
)
Возвращает объект Variable, созданный из variable_def.
gather_nd
gather_nd(
indices, name=None
)
Извлекает срезы из params в Tensor с формой, заданной параметром indices.
Подробности см. в tf.gather_nd.
| Аргументы | |
|---|---|
indices | Tensor. Должен иметь один из следующих типов: int32, int64. Тензор индексов. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Tensor. Имеет тот же тип, что и params. |
get_shape
get_shape() -> tf.TensorShape
Псевдоним Variable.shape.
initialized_value
initialized_value()
Возвращает значение инициализированной переменной. (Устарело.)
Используйте этот метод вместо самой переменной для инициализации другой переменной значением, зависящим от значения этой переменной.
# Initialize 'v' with a random tensor. v = tf.Variable(tf.random.truncated_normal([10, 40])) # Use `initialized_value` to guarantee that `v` has been # initialized before its value is used to initialize `w`. # The random values are picked only once. w = tf.Variable(v.initialized_value() * 2.0)
| Возвращает | |
|---|---|
Tensor, содержащий значение этой переменной после выполнения ее инициализатора. |
load
load(
value, session=None
)
Загружает новое значение в эту переменную. (Устарело.)
Записывает новое значение в память переменной. Не добавляет Ops в граф.
Для этого вспомогательного метода необходим сеанс, в котором запущен граф с этой переменной. Если сеанс не передан, используется сеанс по умолчанию. Подробнее о запуске графа и сеансах см. в разделе 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()
Возвращает хешируемый объект-ссылку на эту Variable.
Основное назначение этого API — помещать переменные в множество или словарь. Переменные нельзя помещать в множество или словарь, поскольку variable.__hash__() больше недоступен начиная с TensorFlow 2.0.
Следующий код будет вызывать исключение начиная с версии 2.0
x = tf.Variable(5)
y = tf.Variable(10)
z = tf.Variable(10)
variable_set = {x, y, z}
Traceback (most recent call last):
TypeError: Variable is unhashable. Instead, use tensor.ref() as the key.
variable_dict = {x: 'five', y: 'ten'}
Traceback (most recent call last):
TypeError: Variable is unhashable. Instead, use tensor.ref() as the key.Вместо этого можно использовать variable.ref().
variable_set = {x.ref(), y.ref(), z.ref()}
x.ref() in variable_set
True
variable_dict = {x.ref(): 'five', y.ref(): 'ten', z.ref(): 'ten'}
variable_dict[y.ref()]
'ten'Кроме того, объект-ссылка предоставляет функцию .deref(), которая возвращает исходную Variable.
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
)
Выполняет разреженное сложение отдельных значений или срезов в Variable.
Variable имеет ранг P, а indices является Tensor ранга Q.
indices должен быть целочисленным тензором, содержащим индексы в self. Его форма должна быть [d_0, ..., d_{Q-2}, K], где 0 < K <= P.
Самое внутреннее измерение indices (длиной K) соответствует индексам элементов (если K = P) или срезов (если K < P) вдоль измерения self с номером K.
updates — это Tensor ранга Q-1+P-K следующей формы:
[d_0, ..., d_{Q-2}, self.shape[K], ..., self.shape[P-1]].
Например, предположим, что мы хотим добавить 4 разрозненных элемента к тензору ранга 1 из 8 элементов. В Python такое обновление выглядело бы так:
v = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8]) indices = tf.constant([[4], [3], [1] ,[7]]) updates = tf.constant([9, 10, 11, 12]) v.scatter_nd_add(indices, updates) print(v)
В результате обновление v будет выглядеть так:
[1, 13, 3, 14, 14, 6, 7, 20]
Подробнее о том, как обновлять срезы, см. в разделе tf.scatter_nd.
| Аргументы | |
|---|---|
indices | Индексы, используемые в операции. |
updates | Значения, используемые в операции. |
name | имя операции. |
| Возвращает | |
|---|---|
| Обновленную переменную. |
scatter_nd_sub
scatter_nd_sub(
indices, updates, name=None
)
Выполняет разреженное вычитание отдельных значений или срезов в Variable.
Предполагается, что ранг переменной равен P, а indices является Tensor ранга Q.
indices должен быть целочисленным тензором, содержащим индексы в self. Его форма должна быть [d_0, ..., d_{Q-2}, K], где 0 < K <= P.
Самое внутреннее измерение indices (длиной K) соответствует индексам элементов (если K = P) или срезов (если K < P) вдоль измерения self с номером K.
updates — это Tensor ранга Q-1+P-K следующей формы:
[d_0, ..., d_{Q-2}, self.shape[K], ..., self.shape[P-1]].
Например, предположим, что мы хотим добавить 4 разрозненных элемента к тензору ранга 1 из 8 элементов. В Python такое обновление выглядело бы так:
v = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8]) indices = tf.constant([[4], [3], [1] ,[7]]) updates = tf.constant([9, 10, 11, 12]) v.scatter_nd_sub(indices, updates) print(v)
После обновления v будет выглядеть так:
[1, -9, 3, -6, -4, 6, 7, -4]
Подробнее о том, как обновлять срезы, см. в разделе tf.scatter_nd.
| Аргументы | |
|---|---|
indices | Индексы, используемые в операции. |
updates | Значения, используемые в операции. |
name | имя операции. |
| Возвращает | |
|---|---|
| Обновленную переменную. |
scatter_nd_update
scatter_nd_update(
indices, updates, name=None
)
Выполняет разреженное присваивание отдельных значений или срезов в Variable.
Variable имеет ранг P, а indices является Tensor ранга Q.
indices должен быть целочисленным тензором, содержащим индексы в self. Его форма должна быть [d_0, ..., d_{Q-2}, K], где 0 < K <= P.
Самое внутреннее измерение indices (длиной K) соответствует индексам элементов (если K = P) или срезов (если K < P) вдоль измерения self с номером K.
updates — это Tensor ранга Q-1+P-K следующей формы:
[d_0, ..., d_{Q-2}, self.shape[K], ..., self.shape[P-1]].
Например, предположим, что мы хотим добавить 4 разрозненных элемента к тензору ранга 1 из 8 элементов. В Python такое обновление выглядело бы так:
v = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8]) indices = tf.constant([[4], [3], [1] ,[7]]) updates = tf.constant([9, 10, 11, 12]) v.scatter_nd_update(indices, updates) print(v)
В результате обновление v будет выглядеть так:
[1, 11, 3, 10, 9, 6, 7, 12]
Подробнее о том, как обновлять срезы, см. в разделе tf.scatter_nd.
| Аргументы | |
|---|---|
indices | Индексы, используемые в операции. |
updates | Значения, используемые в операции. |
name | имя операции. |
| Возвращает | |
|---|---|
| Обновленную переменную. |
scatter_sub
scatter_sub(
sparse_delta, use_locking=False, name=None
)
Вычитает tf.IndexedSlices из этой переменной.
| Аргументы | |
|---|---|
sparse_delta | tf.IndexedSlices, который нужно вычесть из этой переменной. |
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__(
name=None
)
__add__
__add__(
y
)
__and__
__and__(
y
)
__div__
__div__(
y
)
__eq__
__eq__(
other
)
Поэлементно сравнивает две переменные на равенство.
__floordiv__
__floordiv__(
y
)
__ge__
__ge__(
y: Annotated[Any, tf.raw_ops.Any],
name=None
) -> Annotated[Any, tf.raw_ops.Any]
Поэлементно возвращает логическое значение выражения (x >= y).
Примечание: math.greater_equal поддерживает широковещательное распространение. Подробнее о широковещательном распространении см. здесь
Пример:
x = tf.constant([5, 4, 6, 7]) y = tf.constant([5, 2, 5, 10]) tf.math.greater_equal(x, y) ==> [True, True, True, False] x = tf.constant([5, 4, 6, 7]) y = tf.constant([5]) tf.math.greater_equal(x, y) ==> [True, False, True, True]
| Аргументы | |
|---|---|
x | Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64. |
y | Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Tensor типа bool. |
__getitem__
__getitem__(
slice_spec
)
Создает вспомогательный объект среза для заданной переменной.
Это позволяет создать подтензор из части текущего содержимого переменной. Подробные примеры создания срезов см. в разделе tf.Tensor.getitem.
Кроме того, эта функция позволяет присваивать значения выбранному диапазону. Это аналог функциональности __setitem__ в Python. Однако синтаксис отличается, чтобы пользователь мог сохранить операцию присваивания для группировки или передачи в sess.run() в TF1. Например:
import tensorflow as tf A = tf.Variable([[1,2,3], [4,5,6], [7,8,9]], dtype=tf.float32) print(A[:2, :2]) # => [[1,2], [4,5]] A[:2,:2].assign(22. * tf.ones((2, 2)))) print(A) # => [[22, 22, 3], [22, 22, 6], [7,8,9]]
Обратите внимание, что в настоящее время присваивания не поддерживают семантику широковещательного распространения NumPy.
| Аргументы | |
|---|---|
var | Объект ops.Variable. |
slice_spec | Аргументы для Tensor.getitem. |
| Возвращает | |
|---|---|
Соответствующий срез «tensor», заданный параметром «slice_spec», в виде оператора. У этого оператора также есть метод assign(), который можно использовать для создания оператора присваивания. |
| Вызывает исключение | |
|---|---|
ValueError | Если размер диапазона среза отрицателен. |
TypeError | TypeError: если индексы среза не являются целыми числами, объектами slice, многоточием, tf.newaxis или тензорами int32/int64. |
__gt__
__gt__(
y: Annotated[Any, tf.raw_ops.Any],
name=None
) -> Annotated[Any, tf.raw_ops.Any]
Поэлементно возвращает логическое значение выражения (x > y).
Примечание: math.greater поддерживает широковещательное распространение. Подробнее о широковещательном распространении см. здесь
Пример:
x = tf.constant([5, 4, 6]) y = tf.constant([5, 2, 5]) tf.math.greater(x, y) ==> [False, True, True] x = tf.constant([5, 4, 6]) y = tf.constant([5]) tf.math.greater(x, y) ==> [False, False, True]
| Аргументы | |
|---|---|
x | Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64. |
y | Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Tensor типа bool. |
__invert__
__invert__(
name=None
)
__iter__
__iter__()
При eager-выполнении перебирает значения переменной.
__le__
__le__(
y: Annotated[Any, tf.raw_ops.Any],
name=None
) -> Annotated[Any, tf.raw_ops.Any]
Поэлементно возвращает логическое значение выражения (x <= y).
Примечание: math.less_equal поддерживает широковещательное распространение. Подробнее о широковещательном распространении см. здесь
Пример:
x = tf.constant([5, 4, 6]) y = tf.constant([5]) tf.math.less_equal(x, y) ==> [True, True, False] x = tf.constant([5, 4, 6]) y = tf.constant([5, 6, 6]) tf.math.less_equal(x, y) ==> [True, True, True]
| Аргументы | |
|---|---|
x | Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64. |
y | Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Tensor типа bool. |
__lt__
__lt__(
y: Annotated[Any, tf.raw_ops.Any],
name=None
) -> Annotated[Any, tf.raw_ops.Any]
Поэлементно возвращает логическое значение выражения (x < y).
Примечание: math.less поддерживает широковещательное распространение. Подробнее о широковещательном распространении см. здесь
Пример:
x = tf.constant([5, 4, 6]) y = tf.constant([5]) tf.math.less(x, y) ==> [False, True, False] x = tf.constant([5, 4, 6]) y = tf.constant([5, 6, 7]) tf.math.less(x, y) ==> [False, True, True]
| Аргументы | |
|---|---|
x | Tensor. Должен иметь один из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64. |
y | Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
A Tensor of type bool. |
__matmul__
__matmul__(
y
)
__mod__
__mod__(
y
)
__mul__
__mul__(
y
)
__ne__
__ne__(
other
)
Сравнивает два тензора поэлементно на равенство.
__neg__
__neg__(
name=None
) -> Annotated[Any, tf.raw_ops.Any]
Вычисляет поэлементное отрицательное значение.
То есть \(y = -x\).
| Аргументы | |
|---|---|
x | A Tensor. Must be one of the following types: bfloat16, half, float32, float64, int8, int16, int32, int64, complex64, complex128. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
A Tensor. Has the same type as x. |
__or__
__or__(
y
)
__pow__
__pow__(
y
)
__radd__
__radd__(
x
)
__rand__
__rand__(
x
)
__rdiv__
__rdiv__(
x
)
__rfloordiv__
__rfloordiv__(
x
)
__rmatmul__
__rmatmul__(
x
)
__rmod__
__rmod__(
x
)
__rmul__
__rmul__(
x
)
__ror__
__ror__(
x
)
__rpow__
__rpow__(
x
)
__rsub__
__rsub__(
x
)
__rtruediv__
__rtruediv__(
x
)
__rxor__
__rxor__(
x
)
__sub__
__sub__(
y
)
__truediv__
__truediv__(
y
)
__xor__
__xor__(
y
)
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/compat/v1/Variable