tf.RaggedTensor
Представляет разреженный тензор.
Используется в блокнотах
| Используется в руководстве |
|---|
RaggedTensor — это тензор с одним или несколькими разреженными измерениями, то есть измерениями, срезы которых могут иметь разную длину. Например, внутреннее измерение (столбцы) rt=[[3, 1, 4, 1], [], [5, 9, 2], [6], []] является разреженным, поскольку срезы столбцов (rt[0, :], ..., rt[4, :]) имеют разную длину. Измерения, срезы которых имеют одинаковую длину, называются равномерными измерениями. Самое внешнее измерение RaggedTensor всегда является равномерным, поскольку состоит из одного среза (и поэтому длина среза не может различаться).
Общее число измерений RaggedTensor называется его рангом, а число разреженных измерений RaggedTensor называется его разреженным рангом. Разреженный ранг RaggedTensor фиксируется во время создания графа: он не может зависеть от значений Tensor во время выполнения и не может динамически меняться при разных запусках сеанса.
Обратите внимание: конструктор __init__ является закрытым. Для создания RaggedTensor используйте один из следующих методов:
tf.RaggedTensor.from_row_lengthstf.RaggedTensor.from_value_rowidstf.RaggedTensor.from_row_splitstf.RaggedTensor.from_row_startstf.RaggedTensor.from_row_limitstf.RaggedTensor.from_nested_row_splitstf.RaggedTensor.from_nested_row_lengthstf.RaggedTensor.from_nested_value_rowids
Потенциально разреженные тензоры
Многие операции поддерживают как Tensor, так и RaggedTensor (полный список см. в разделе tf.ragged). Термин «потенциально разреженный тензор» может обозначать тензор, который может быть как Tensor, так и RaggedTensor. Разреженный ранг Tensor равен нулю.
Описание форм RaggedTensor
При описании формы RaggedTensor разреженные измерения можно заключать в скобки. Например, форму 3-мерного RaggedTensor, в котором для каждого слова в предложении хранится вектор фиксированного размера, а предложения входят в пакет, можно записать как [num_sentences, (num_words), embedding_size]. Скобки вокруг (num_words) указывают, что это измерение является разреженным и длина списка элементов в этом измерении может различаться для каждого элемента.
Компонентные тензоры
Внутренне RaggedTensor состоит из объединённого списка значений, разделённых на строки переменной длины. В частности, каждый RaggedTensor состоит из:
Тензора
values, объединяющего строки переменной длины в плоский список. Например, тензорvaluesдля[[3, 1, 4, 1], [], [5, 9, 2], [6], []]— это[3, 1, 4, 1, 5, 9, 2, 6].Вектора
row_splits, указывающего, как эти плоские значения разделены на строки. В частности, значения для строкиrt[i]хранятся в срезеrt.values[rt.row_splits[i]:rt.row_splits[i+1]].
Пример:
print(tf.RaggedTensor.from_row_splits(
values=[3, 1, 4, 1, 5, 9, 2, 6],
row_splits=[0, 4, 4, 7, 8, 8]))
<tf.RaggedTensor [[3, 1, 4, 1], [], [5, 9, 2], [6], []]>Альтернативные схемы разбиения на строки
Помимо row_splits, разреженные тензоры поддерживают ещё пять схем разбиения на строки:
row_lengths: вектор формы[nrows], задающий длину каждой строки.value_rowidsиnrows:value_rowids— это вектор формы[nvals], элементы которого соответствуют элементамvaluesодин к одному и задают индекс строки для каждого значения. В частности, строкаrt[row]состоит из значенийrt.values[j], гдеvalue_rowids[j]==row.nrows— целочисленный скаляр, задающий число строк вRaggedTensor. (nrowsиспользуется для указания завершающих пустых строк.)row_starts: вектор формы[nrows], задающий начальное смещение каждой строки. Эквивалентенrow_splits[:-1].row_limits: вектор формы[nrows], задающий конечное смещение каждой строки. Эквивалентенrow_splits[1:].uniform_row_length: скалярный тензор, задающий длину каждой строки. Эту схему разбиения на строки можно использовать только в том случае, если все строки имеют одинаковую длину.
Пример: следующие разреженные тензоры эквивалентны и представляют вложенный список [[3, 1, 4, 1], [], [5, 9, 2], [6], []].
values = [3, 1, 4, 1, 5, 9, 2, 6]
RaggedTensor.from_row_splits(values, row_splits=[0, 4, 4, 7, 8, 8])
<tf.RaggedTensor [[3, 1, 4, 1], [], [5, 9, 2], [6], []]>
RaggedTensor.from_row_lengths(values, row_lengths=[4, 0, 3, 1, 0])
<tf.RaggedTensor [[3, 1, 4, 1], [], [5, 9, 2], [6], []]>
RaggedTensor.from_value_rowids(
values, value_rowids=[0, 0, 0, 0, 2, 2, 2, 3], nrows=5)
<tf.RaggedTensor [[3, 1, 4, 1], [], [5, 9, 2], [6], []]>
RaggedTensor.from_row_starts(values, row_starts=[0, 4, 4, 7, 8])
<tf.RaggedTensor [[3, 1, 4, 1], [], [5, 9, 2], [6], []]>
RaggedTensor.from_row_limits(values, row_limits=[4, 4, 7, 8, 8])
<tf.RaggedTensor [[3, 1, 4, 1], [], [5, 9, 2], [6], []]>
RaggedTensor.from_uniform_row_length(values, uniform_row_length=2)
<tf.RaggedTensor [[3, 1], [4, 1], [5, 9], [2, 6]]>Несколько разреженных измерений
RaggedTensor с несколькими разреженными измерениями можно определить, используя вложенный RaggedTensor для тензора values. Каждый вложенный RaggedTensor добавляет одно разреженное измерение.
inner_rt = RaggedTensor.from_row_splits( # =rt1 from above
values=[3, 1, 4, 1, 5, 9, 2, 6], row_splits=[0, 4, 4, 7, 8, 8])
outer_rt = RaggedTensor.from_row_splits(
values=inner_rt, row_splits=[0, 3, 3, 5])
print(outer_rt.to_list())
[[[3, 1, 4, 1], [], [5, 9, 2]], [], [[6], []]]
print(outer_rt.ragged_rank)
2Функцию-фабрику RaggedTensor.from_nested_row_splits можно использовать для непосредственного создания RaggedTensor с несколькими разреженными измерениями, передав список тензоров row_splits:
RaggedTensor.from_nested_row_splits(
flat_values=[3, 1, 4, 1, 5, 9, 2, 6],
nested_row_splits=([0, 3, 3, 5], [0, 4, 4, 7, 8, 8])).to_list()
[[[3, 1, 4, 1], [], [5, 9, 2]], [], [[6], []]]Равномерные внутренние измерения
RaggedTensor с равномерными внутренними измерениями можно определить, используя многомерный Tensor для values.
rt = RaggedTensor.from_row_splits(values=tf.ones([5, 3], tf.int32),
row_splits=[0, 2, 5])
print(rt.to_list())
[[[1, 1, 1], [1, 1, 1]],
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]]
print(rt.shape)
(2, None, 3)Равномерные внешние измерения
RaggedTensor с равномерными внешними измерениями можно определить, используя один или несколько RaggedTensor с тензором разбиения на строки uniform_row_length. Например, RaggedTensor формы [2, 2, None] можно создать этим способом из значений RaggedTensor формы [4, None]:
values = tf.ragged.constant([[1, 2, 3], [4], [5, 6], [7, 8, 9, 10]]) print(values.shape) (4, None) rt6 = tf.RaggedTensor.from_uniform_row_length(values, 2) print(rt6) <tf.RaggedTensor [[[1, 2, 3], [4]], [[5, 6], [7, 8, 9, 10]]]> print(rt6.shape) (2, 2, None)
Обратите внимание, что rt6 содержит только одно разреженное измерение (самое внутреннее измерение). В отличие от него, если для создания похожего RaggedTensor использовать from_row_splits, то этот RaggedTensor будет иметь два разреженных измерения:
rt7 = tf.RaggedTensor.from_row_splits(values, [0, 2, 4]) print(rt7.shape) (2, None, None)
Равномерные и разреженные внешние измерения можно чередовать, то есть можно создать тензор с любой комбинацией разреженных и равномерных измерений. Например, RaggedTensor t4 формы [3, None, 4, 8, None, 2] можно создать следующим образом:
t0 = tf.zeros([1000, 2]) # Shape: [1000, 2] t1 = RaggedTensor.from_row_lengths(t0, [...]) # [160, None, 2] t2 = RaggedTensor.from_uniform_row_length(t1, 8) # [20, 8, None, 2] t3 = RaggedTensor.from_uniform_row_length(t2, 4) # [5, 4, 8, None, 2] t4 = RaggedTensor.from_row_lengths(t3, [...]) # [3, None, 4, 8, None, 2]
| Атрибуты | |
|---|---|
dtype | DType значений в этом тензоре. |
flat_values | Самый внутренний тензор values для этого разреженного тензора. В частности, если Концептуально
Пример:rt = tf.ragged.constant([[[3, 1, 4, 1], [], [5, 9, 2]], [], [[6], []]]) print(rt.flat_values) tf.Tensor([3 1 4 1 5 9 2 6], shape=(8,), dtype=int32) |
nested_row_splits | Кортеж, содержащий row_splits для всех разреженных измерений.
* `value_splits = ()` if `rt.values` is a `Tensor`. * `value_splits = rt.values.nested_row_splits` otherwise. Пример:rt = tf.ragged.constant(
[[[[3, 1, 4, 1], [], [5, 9, 2]], [], [[6], []]]])
for i, splits in enumerate(rt.nested_row_splits):
print('Splits for dimension %d: %s' % (i+1, splits.numpy()))
Splits for dimension 1: [0 3]
Splits for dimension 2: [0 3 3 5]
Splits for dimension 3: [0 4 4 7 8 8] |
ragged_rank | Число разбиений flat_values объекта RaggedTensor.
values = tf.ragged.constant([[1, 2, 3], [4], [5, 6], [7, 8, 9, 10]]) values.ragged_rank 1 rt = tf.RaggedTensor.from_uniform_row_length(values, 2) rt.ragged_rank 2 |
row_splits | Индексы разбиения на строки для values этого разреженного тензора.
Пример:rt = tf.ragged.constant([[3, 1, 4, 1], [], [5, 9, 2], [6], []]) print(rt.row_splits) # indices of row splits in rt.values tf.Tensor([0 4 4 7 8 8], shape=(6,), dtype=int64) |
shape | Статически известная форма этого разреженного тензора.
tf.ragged.constant([[0], [1, 2]]).shape TensorShape([2, None]) tf.ragged.constant([[[0, 1]], [[1, 2], [3, 4]]], ragged_rank=1).shape TensorShape([2, None, 2]) |
uniform_row_length | Длина каждой строки этого разреженного тензора или None, если строки разреженные.
rt1 = tf.ragged.constant([[1, 2, 3], [4], [5, 6], [7, 8, 9, 10]]) print(rt1.uniform_row_length) # rows are ragged. None rt2 = tf.RaggedTensor.from_uniform_row_length(
values=rt1, uniform_row_length=2)
print(rt2)
<tf.RaggedTensor [[[1, 2, 3], [4]], [[5, 6], [7, 8, 9, 10]]]>
print(rt2.uniform_row_length) # rows are not ragged (all have size 2).
tf.Tensor(2, shape=(), dtype=int64)Строки RaggedTensor считаются равномерными (то есть неразреженными), только если можно статически определить (во время построения графа), что все строки имеют одинаковую длину. |
values | Объединённые строки этого разреженного тензора.
Пример:rt = tf.ragged.constant([[3, 1, 4, 1], [], [5, 9, 2], [6], []]) print(rt.values) tf.Tensor([3 1 4 1 5 9 2 6], shape=(8,), dtype=int32) |
Методы
bounding_shape
bounding_shape(
axis=None, name=None, out_type=None
)
Возвращает форму минимального ограничивающего параллелепипеда для этого RaggedTensor.
| Аргументы | |
|---|---|
axis | Целочисленный скаляр или вектор, указывающий, для каких осей нужно вернуть ограничивающий параллелепипед. Если не задан, возвращается полный ограничивающий параллелепипед. |
name | Префикс имени возвращаемого тензора (необязательный). |
out_type | dtype для возвращаемого тензора. По умолчанию — self.row_splits.dtype. |
| Возвращает | |
|---|---|
Целочисленный Tensor (dtype=self.row_splits.dtype). Если axis не задан, то output — это вектор с output.shape=[self.shape.ndims]. Если axis — скаляр, то output — скаляр. Если axis — вектор, то output — вектор, где output[i] — размер ограничивающего параллелепипеда для измерения axis[i]. |
Пример:
rt = tf.ragged.constant([[1, 2, 3, 4], [5], [], [6, 7, 8, 9], [10]]) rt.bounding_shape().numpy() array([5, 4])
consumers
consumers()
from_nested_row_lengths
@classmethod
from_nested_row_lengths(
flat_values, nested_row_lengths, name=None, validate=True
)
Создаёт RaggedTensor из вложенного списка тензоров row_lengths.
Эквивалентно:
result = flat_values for row_lengths in reversed(nested_row_lengths): result = from_row_lengths(result, row_lengths)
| Аргументы | |
|---|---|
flat_values | Потенциально разреженный тензор. |
nested_row_lengths | Список целочисленных тензоров размерности 1. Тензор i используется как row_lengths для разреженного измерения i. |
name | Префикс имени RaggedTensor (необязательный). |
validate | Если значение равно true, используются проверки для подтверждения того, что аргументы образуют корректный RaggedTensor. Примечание: эти проверки увеличивают время выполнения, поскольку их необходимо выполнять для каждого значения тензора. |
| Возвращает | |
|---|---|
RaggedTensor (или flat_values, если nested_row_lengths пуст). |
from_nested_row_splits
@classmethod
from_nested_row_splits(
flat_values, nested_row_splits, name=None, validate=True
)
Создаёт RaggedTensor из вложенного списка тензоров row_splits.
Эквивалентно:
result = flat_values for row_splits in reversed(nested_row_splits): result = from_row_splits(result, row_splits)
| Аргументы | |
|---|---|
flat_values | Потенциально разреженный тензор. |
nested_row_splits | Список целочисленных тензоров размерности 1. Тензор i используется как row_splits для разреженного измерения i. |
name | Префикс имени RaggedTensor (необязательный). |
validate | Если значение равно true, используются проверки для подтверждения того, что аргументы образуют корректный RaggedTensor. Примечание: эти проверки увеличивают время выполнения, поскольку их необходимо выполнять для каждого значения тензора. |
| Возвращает | |
|---|---|
RaggedTensor (или flat_values, если nested_row_splits пуст). |
from_nested_value_rowids
@classmethod
from_nested_value_rowids(
flat_values,
nested_value_rowids,
nested_nrows=None,
name=None,
validate=True
)
Создаёт RaggedTensor из вложенного списка тензоров value_rowids.
Эквивалентно:
result = flat_values for (rowids, nrows) in reversed(zip(nested_value_rowids, nested_nrows)): result = from_value_rowids(result, rowids, nrows)
| Аргументы | |
|---|---|
flat_values | Потенциально разреженный тензор. |
nested_value_rowids | Список целочисленных тензоров размерности 1. Тензор i используется как value_rowids для разреженного измерения i. |
nested_nrows | Список целочисленных скаляров. Скаляр i используется как nrows для разреженного измерения i. |
name | Префикс имени RaggedTensor (необязательный). |
validate | Если значение равно true, используются проверки для подтверждения того, что аргументы образуют корректный RaggedTensor. Примечание: эти проверки увеличивают время выполнения, поскольку их необходимо выполнять для каждого значения тензора. |
| Возвращает | |
|---|---|
RaggedTensor (или flat_values, если nested_value_rowids пуст). |
| Вызывает исключение | |
|---|---|
ValueError | Если len(nested_values_rowids) != len(nested_nrows). |
from_row_lengths
@classmethod
from_row_lengths(
values, row_lengths, name=None, validate=True
)
Создаёт RaggedTensor, строки которого разбиты согласно row_lengths.
Возвращённый RaggedTensor соответствует списку Python, определённому следующим образом:
result = [[values.pop(0) for i in range(length)]
for length in row_lengths]
| Аргументы | |
|---|---|
values | Потенциально разреженный тензор формы [nvals, ...]. |
row_lengths | Целочисленный тензор размерности 1 формы [nrows]. Должен содержать неотрицательные значения. sum(row_lengths) должен быть равен nvals. |
name | Префикс имени RaggedTensor (необязательный). |
validate | Если значение равно true, используются проверки для подтверждения того, что аргументы образуют корректный RaggedTensor. Примечание: эти проверки увеличивают время выполнения, поскольку их необходимо выполнять для каждого значения тензора. |
| Возвращает | |
|---|---|
RaggedTensor. result.rank = values.rank + 1. result.ragged_rank = values.ragged_rank + 1. |
Пример:
print(tf.RaggedTensor.from_row_lengths(
values=[3, 1, 4, 1, 5, 9, 2, 6],
row_lengths=[4, 0, 3, 1, 0]))
<tf.RaggedTensor [[3, 1, 4, 1], [], [5, 9, 2], [6], []]>from_row_limits
@classmethod
from_row_limits(
values, row_limits, name=None, validate=True
)
Создаёт RaggedTensor, строки которого разбиты согласно row_limits.
Эквивалентно: from_row_splits(values, concat([0, row_limits])).
| Аргументы | |
|---|---|
values | Потенциально разреженный тензор формы [nvals, ...]. |
row_limits | Целочисленный тензор размерности 1 формы [nrows]. Значения должны быть отсортированы по возрастанию. Если nrows>0, то row_limits[-1] должен быть равен nvals. |
name | Префикс имени RaggedTensor (необязательный). |
validate | Если значение равно true, используются проверки для подтверждения того, что аргументы образуют корректный RaggedTensor. Примечание: эти проверки увеличивают время выполнения, поскольку их необходимо выполнять для каждого значения тензора. |
| Возвращает | |
|---|---|
RaggedTensor. result.rank = values.rank + 1. result.ragged_rank = values.ragged_rank + 1. |
Пример:
print(tf.RaggedTensor.from_row_limits(
values=[3, 1, 4, 1, 5, 9, 2, 6],
row_limits=[4, 4, 7, 8, 8]))
<tf.RaggedTensor [[3, 1, 4, 1], [], [5, 9, 2], [6], []]>from_row_splits
@classmethod
from_row_splits(
values, row_splits, name=None, validate=True
)
Создаёт RaggedTensor, строки которого разбиты согласно row_splits.
Возвращённый RaggedTensor соответствует списку Python, определённому следующим образом:
result = [values[row_splits[i]:row_splits[i + 1]]
for i in range(len(row_splits) - 1)]
| Аргументы | |
|---|---|
values | Потенциально разреженный тензор формы [nvals, ...]. |
row_splits | Целочисленный тензор размерности 1 формы [nrows+1]. Не должен быть пустым; значения должны быть отсортированы по возрастанию. row_splits[0] должен быть равен нулю, а row_splits[-1] должен быть равен nvals. |
name | Префикс имени RaggedTensor (необязательный). |
validate | Если значение равно true, используются проверки для подтверждения того, что аргументы образуют корректный RaggedTensor. Примечание: эти проверки увеличивают время выполнения, поскольку их необходимо выполнять для каждого значения тензора. |
| Возвращает | |
|---|---|
RaggedTensor. result.rank = values.rank + 1. result.ragged_rank = values.ragged_rank + 1. |
| Вызывает исключение | |
|---|---|
ValueError | Если row_splits является пустым списком. |
Пример:
print(tf.RaggedTensor.from_row_splits(
values=[3, 1, 4, 1, 5, 9, 2, 6],
row_splits=[0, 4, 4, 7, 8, 8]))
<tf.RaggedTensor [[3, 1, 4, 1], [], [5, 9, 2], [6], []]>from_row_starts
@classmethod
from_row_starts(
values, row_starts, name=None, validate=True
)
Создаёт RaggedTensor, строки которого разбиты согласно row_starts.
Эквивалентно: from_row_splits(values, concat([row_starts, nvals])).
| Аргументы | |
|---|---|
values | Потенциально разреженный тензор формы [nvals, ...]. |
row_starts | Целочисленный тензор размерности 1 формы [nrows]. Значения должны быть неотрицательными и отсортированными по возрастанию. Если nrows>0, то row_starts[0] должен быть равен нулю. |
name | Префикс имени RaggedTensor (необязательный). |
validate | Если значение равно true, используются проверки для подтверждения того, что аргументы образуют корректный RaggedTensor. Примечание: эти проверки увеличивают время выполнения, поскольку их необходимо выполнять для каждого значения тензора. |
| Возвращает | |
|---|---|
RaggedTensor. result.rank = values.rank + 1. result.ragged_rank = values.ragged_rank + 1. |
Пример:
print(tf.RaggedTensor.from_row_starts(
values=[3, 1, 4, 1, 5, 9, 2, 6],
row_starts=[0, 4, 4, 7, 8]))
<tf.RaggedTensor [[3, 1, 4, 1], [], [5, 9, 2], [6], []]>from_sparse
@classmethod
from_sparse(
st_input,
name=None,
row_splits_dtype=tf.dtypes.int64
)
Преобразует 2D tf.sparse.SparseTensor в RaggedTensor.
Каждая строка output RaggedTensor будет содержать явные значения из той же строки st_input. st_input должен быть разреженным справа. Если это не так, будет сгенерирована ошибка.
Пример:
indices = [[0, 0], [0, 1], [0, 2], [1, 0], [3, 0]]
st = tf.sparse.SparseTensor(indices=indices,
values=[1, 2, 3, 4, 5],
dense_shape=[4, 3])
tf.RaggedTensor.from_sparse(st).to_list()
[[1, 2, 3], [4], [], [5]]В настоящее время поддерживаются только двумерные SparseTensors.
| Аргументы | |
|---|---|
st_input | Разреженный тензор для преобразования. Должен иметь ранг 2. |
name | Необязательный префикс имени для возвращаемых тензоров. |
row_splits_dtype | dtype для тензора row_splits возвращаемого RaggedTensor. Один из типов tf.int32 или tf.int64. |
| Возвращает | |
|---|---|
RaggedTensor с теми же значениями, что и у st_input. output.ragged_rank = rank(st_input) - 1. output.shape = [st_input.dense_shape[0], None]. |
| Вызывает исключение | |
|---|---|
ValueError | Если число измерений в st_input неизвестно статически или не равно двум. |
from_tensor
@classmethod
from_tensor(
tensor,
lengths=None,
padding=None,
ragged_rank=1,
name=None,
row_splits_dtype=tf.dtypes.int64
)
Преобразует tf.Tensor в RaggedTensor.
Набор отсутствующих/значений по умолчанию можно указать с помощью вектора длин или значения заполнения (но не обоими способами одновременно). Если указан lengths, выходной тензор будет удовлетворять условию output[row] = tensor[row][:lengths[row]]. Если 'lengths' — это список списков или кортеж списков, эти списки будут использоваться как вложенные длины строк. Если указан padding, любой суффикс строки, целиком состоящий из padding, будет исключен из возвращаемого RaggedTensor. Если не указаны ни lengths, ни padding, возвращаемый RaggedTensor не будет содержать отсутствующих/значений по умолчанию.
Примеры:
dt = tf.constant([[5, 7, 0], [0, 3, 0], [6, 0, 0]]) tf.RaggedTensor.from_tensor(dt) <tf.RaggedTensor [[5, 7, 0], [0, 3, 0], [6, 0, 0]]> tf.RaggedTensor.from_tensor(dt, lengths=[1, 0, 3]) <tf.RaggedTensor [[5], [], [6, 0, 0]]>
tf.RaggedTensor.from_tensor(dt, padding=0) <tf.RaggedTensor [[5, 7], [0, 3], [6]]>
dt = tf.constant([[[5, 0], [7, 0], [0, 0]],
[[0, 0], [3, 0], [0, 0]],
[[6, 0], [0, 0], [0, 0]]])
tf.RaggedTensor.from_tensor(dt, lengths=([2, 0, 3], [1, 1, 2, 0, 1]))
<tf.RaggedTensor [[[5], [7]], [], [[6, 0], [], [0]]]>| Аргументы | |
|---|---|
tensor | Tensor для преобразования. Ранг должен быть не меньше ragged_rank + 1. |
lengths | Необязательный набор длин строк, заданный одномерным целочисленным Tensor, длина которого равна tensor.shape[0] (числу строк в tensor). Если задано, output[row] будет содержать tensor[row][:lengths[row]]. Отрицательные длины считаются равными нулю. Для этого аргумента можно также передать список или кортеж длин, которые будут использоваться как вложенные длины строк для создания RaggedTensor с несколькими нерегулярными измерениями. |
padding | Необязательное значение заполнения. Если задано, любой суффикс строки, целиком состоящий из padding, будет исключен из возвращаемого RaggedTensor. padding — это Tensor с тем же типом данных, что и у tensor, и с shape=tensor.shape[ragged_rank + 1:]. |
ragged_rank | Целое число, задающее ранг нерегулярности возвращаемого RaggedTensor. Должно быть больше нуля. |
name | Необязательный префикс имени для возвращаемых тензоров. |
row_splits_dtype | dtype для тензора row_splits возвращаемого RaggedTensor. Один из типов tf.int32 или tf.int64. |
| Возвращает | |
|---|---|
RaggedTensor с указанным ragged_rank. Форма возвращаемого ragged-тензора совместима с формой tensor. |
| Вызывает исключение | |
|---|---|
ValueError | Если одновременно указаны lengths и padding. |
ValueError | Если ранг tensor равен 0 или 1. |
from_uniform_row_length
@classmethod
from_uniform_row_length(
values, uniform_row_length, nrows=None, validate=True, name=None
)
Создает RaggedTensor со строками, разбитыми по uniform_row_length.
Этот метод можно использовать для создания RaggedTensor с несколькими равномерными внешними измерениями. Например, RaggedTensor с формой [2, 2, None] можно создать этим методом из значений RaggedTensor с формой [4, None]:
values = tf.ragged.constant([[1, 2, 3], [4], [5, 6], [7, 8, 9, 10]]) print(values.shape) (4, None) rt1 = tf.RaggedTensor.from_uniform_row_length(values, 2) print(rt1) <tf.RaggedTensor [[[1, 2, 3], [4]], [[5, 6], [7, 8, 9, 10]]]> print(rt1.shape) (2, 2, None)
Обратите внимание, что rt1 содержит только одно нерегулярное измерение (самое внутреннее измерение). В отличие от этого, если для создания похожего RaggedTensor использовать from_row_splits, такой RaggedTensor будет иметь два нерегулярных измерения:
rt2 = tf.RaggedTensor.from_row_splits(values, [0, 2, 4]) print(rt2.shape) (2, None, None)
| Аргументы | |
|---|---|
values | Потенциально нерегулярный тензор с формой [nvals, ...]. |
uniform_row_length | Скалярный целочисленный тензор. Должен быть неотрицательным. Размер внешней оси values должен делиться на uniform_row_length без остатка. |
nrows | Число строк в создаваемом RaggedTensor. Если не указано, по умолчанию используется nvals/uniform_row_length (или 0, если uniform_row_length==0). nrows нужно указывать только в том случае, если uniform_row_length может быть равно нулю. uniform_row_length*nrows должно быть nvals. |
validate | Если true, для проверки корректности аргументов используется набор утверждений RaggedTensor. Примечание: эти проверки требуют затрат во время выполнения, поскольку их нужно выполнять для каждого значения тензора. |
name | Необязательный префикс имени для RaggedTensor. |
| Возвращает | |
|---|---|
RaggedTensor, соответствующий списку Python, определенному следующим образом:
result = [[values.pop(0) for i in range(uniform_row_length)]
for _ in range(nrows)]
|
from_value_rowids
@classmethod
from_value_rowids(
values, value_rowids, nrows=None, name=None, validate=True
)
Создает RaggedTensor со строками, разбитыми по value_rowids.
Возвращаемый RaggedTensor соответствует списку Python, определенному следующим образом:
result = [[values[i] for i in range(len(values)) if value_rowids[i] == row]
for row in range(nrows)]
| Аргументы | |
|---|---|
values | Потенциально нерегулярный тензор с формой [nvals, ...]. |
value_rowids | Одномерный целочисленный тензор с формой [nvals], элементы которого однозначно соответствуют values и задают индекс строки для каждого значения. Должен быть неотрицательным и отсортированным по возрастанию. |
nrows | Целочисленный скаляр, задающий число строк. Его следует указывать, если RaggedTensor может содержать пустые начальные строки. Должен быть больше value_rowids[-1] (или равен нулю, если value_rowids пуст). По умолчанию используется value_rowids[-1] + 1 (или ноль, если value_rowids пуст). |
name | Необязательный префикс имени для RaggedTensor. |
validate | Если true, для проверки корректности аргументов используется набор утверждений RaggedTensor. Примечание: эти проверки требуют затрат во время выполнения, поскольку их нужно выполнять для каждого значения тензора. |
| Возвращает | |
|---|---|
RaggedTensor. result.rank = values.rank + 1. result.ragged_rank = values.ragged_rank + 1. |
| Вызывает исключение | |
|---|---|
ValueError | Если nrows несовместим с value_rowids. |
Пример:
print(tf.RaggedTensor.from_value_rowids(
values=[3, 1, 4, 1, 5, 9, 2, 6],
value_rowids=[0, 0, 0, 0, 2, 2, 2, 3],
nrows=5))
<tf.RaggedTensor [[3, 1, 4, 1], [], [5, 9, 2], [6], []]>get_shape
get_shape() -> tf.TensorShape
Статически известная форма этого ragged-тензора.
| Возвращает | |
|---|---|
TensorShape, содержащий статически известную форму этого ragged-тензора. Размер нерегулярных измерений равен None. |
Псевдоним свойства shape.
Примеры:
tf.ragged.constant([[0], [1, 2]]).get_shape() TensorShape([2, None])
tf.ragged.constant( [[[0, 1]], [[1, 2], [3, 4]]], ragged_rank=1).get_shape() TensorShape([2, None, 2])
merge_dims
merge_dims(
outer_axis, inner_axis
)
Объединяет outer_axis...inner_axis в одно измерение.
Возвращает копию этого RaggedTensor, в которой указанный диапазон измерений преобразован в одно измерение, а элементы расположены в порядке строк.
Примеры:
rt = tf.ragged.constant([[[1, 2], [3]], [[4, 5, 6]]]) print(rt.merge_dims(0, 1)) <tf.RaggedTensor [[1, 2], [3], [4, 5, 6]]> print(rt.merge_dims(1, 2)) <tf.RaggedTensor [[1, 2, 3], [4, 5, 6]]> print(rt.merge_dims(0, 2)) tf.Tensor([1 2 3 4 5 6], shape=(6,), dtype=int32)
Чтобы воспроизвести поведение np.flatten (который преобразует все измерения в одномерную форму), используйте rt.merge_dims(0, -1). To mimic the behavior oftf.layers.Flatten(which flattens all dimensions except the outermost batch dimension), usert.merge_dims(1, -1)`.
| Аргументы | |
|---|---|
outer_axis | int: первое измерение в диапазоне объединяемых измерений. Может быть отрицательным, если self.shape.rank известен статически. |
inner_axis | int: последнее измерение в диапазоне объединяемых измерений. Может быть отрицательным, если self.shape.rank известен статически. |
| Возвращает | |
|---|---|
Копию этого тензора, в которой указанные измерения объединены в одно. Форма возвращаемого тензора будет self.shape[:outer_axis] + [N] + self.shape[inner_axis + 1:], где N — общее число срезов в объединенных измерениях. |
nested_row_lengths
nested_row_lengths(
name=None
)
Возвращает кортеж, содержащий длины строк для всех нерегулярных измерений.
rt.nested_row_lengths() — это кортеж, содержащий тензоры row_lengths для всех нерегулярных измерений в rt, упорядоченные от внешнего к внутреннему.
| Аргументы | |
|---|---|
name | Необязательный префикс имени для возвращаемых тензоров. |
| Возвращает | |
|---|---|
tuple одномерных целочисленных Tensors. Длина кортежа равна self.ragged_rank. |
nested_value_rowids
nested_value_rowids(
name=None
)
Возвращает кортеж, содержащий идентификаторы строк значений для всех нерегулярных измерений.
rt.nested_value_rowids — это кортеж, содержащий тензоры value_rowids для всех нерегулярных измерений в rt, упорядоченные от внешнего к внутреннему. В частности, rt.nested_value_rowids = (rt.value_rowids(),) + value_ids, где:
-
value_ids = (), еслиrt.values— этоTensor. -
value_ids = rt.values.nested_value_rowidsв противном случае.
| Аргументы | |
|---|---|
name | Необязательный префикс имени для возвращаемых тензоров. |
| Возвращает | |
|---|---|
tuple одномерных целочисленных Tensor. |
Пример:
rt = tf.ragged.constant(
[[[[3, 1, 4, 1], [], [5, 9, 2]], [], [[6], []]]])
for i, ids in enumerate(rt.nested_value_rowids()):
print('row ids for dimension %d: %s' % (i+1, ids.numpy()))
row ids for dimension 1: [0 0 0]
row ids for dimension 2: [0 0 0 2 2]
row ids for dimension 3: [0 0 0 0 2 2 2 3]nrows
nrows(
out_type=None, name=None
)
Возвращает число строк в этом ragged-тензоре.
То есть размер самого внешнего измерения тензора.
| Аргументы | |
|---|---|
out_type | dtype для возвращаемого тензора. По умолчанию используется self.row_splits.dtype. |
name | Необязательный префикс имени для возвращаемого тензора. |
| Возвращает | |
|---|---|
Скалярный Tensor с типом данных out_type. |
Пример:
rt = tf.ragged.constant([[3, 1, 4, 1], [], [5, 9, 2], [6], []]) print(rt.nrows()) # rt has 5 rows. tf.Tensor(5, shape=(), dtype=int64)
numpy
numpy()
Возвращает массив numpy array со значениями этого RaggedTensor.
Требуется, чтобы этот RaggedTensor был создан в режиме eager execution.
Нерегулярные измерения кодируются с помощью массивов numpy arrays с dtype=object и rank=1, где каждый элемент представляет собой одну строку.
Примеры
В следующем примере значение, возвращаемое методом RaggedTensor.numpy(), содержит три объекта массива numpy array: по одному для каждой строки (с rank=1 и dtype=int64) и один для их объединения (с rank=1 и dtype=object):
tf.ragged.constant([[1, 2, 3], [4, 5]], dtype=tf.int64).numpy() array([array([1, 2, 3]), array([4, 5])], dtype=object)
Равномерные измерения кодируются с помощью многомерных массивов numpy array. В следующем примере значение, возвращаемое методом RaggedTensor.numpy(), содержит один объект массива numpy array с rank=2 и dtype=int64:
tf.ragged.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.int64).numpy() array([[1, 2, 3], [4, 5, 6]])
| Возвращает | |
|---|---|
Массив numpy array. |
row_lengths
row_lengths(
axis=1, name=None
)
Возвращает длины строк этого ragged-тензора.
rt.row_lengths()[i] указывает число значений в строке i тензора rt.
| Аргументы | |
|---|---|
axis | Целочисленная константа, указывающая ось, длины строк которой нужно вернуть. |
name | Необязательный префикс имени для возвращаемого тензора. |
| Возвращает | |
|---|---|
Потенциально нерегулярный целочисленный тензор с формой self.shape[:axis]. |
| Вызывает исключение | |
|---|---|
ValueError | Если axis выходит за границы допустимого диапазона. |
Пример:
rt = tf.ragged.constant(
[[[3, 1, 4], [1]], [], [[5, 9], [2]], [[6]], []])
print(rt.row_lengths()) # lengths of rows in rt
tf.Tensor([2 0 2 1 0], shape=(5,), dtype=int64)
print(rt.row_lengths(axis=2)) # lengths of axis=2 rows.
<tf.RaggedTensor [[3, 1], [], [2, 1], [1], []]>row_limits
row_limits(
name=None
)
Возвращает индексы конца строк этого ragged-тензора.
Эти индексы задают положение, в котором заканчиваются значения каждой строки в self.values. rt.row_limits(self) равно rt.row_splits[:-1].
| Аргументы | |
|---|---|
name | Необязательный префикс имени для возвращаемого тензора. |
| Возвращает | |
|---|---|
Одномерный целочисленный тензор с формой [nrows]. Возвращаемый тензор неотрицателен и отсортирован по возрастанию. |
Пример:
rt = tf.ragged.constant([[3, 1, 4, 1], [], [5, 9, 2], [6], []]) print(rt.values) tf.Tensor([3 1 4 1 5 9 2 6], shape=(8,), dtype=int32) print(rt.row_limits()) # indices of row limits in rt.values tf.Tensor([4 4 7 8 8], shape=(5,), dtype=int64)
row_starts
row_starts(
name=None
)
Возвращает начальные индексы строк этого ragged-тензора.
Эти индексы задают положение, с которого начинаются значения каждой строки в self.values. rt.row_starts() равно rt.row_splits[:-1].
| Аргументы | |
|---|---|
name | Необязательный префикс имени для возвращаемого тензора. |
| Возвращает | |
|---|---|
Одномерный целочисленный тензор с формой [nrows]. Возвращаемый тензор неотрицателен и отсортирован по возрастанию. |
Пример:
rt = tf.ragged.constant([[3, 1, 4, 1], [], [5, 9, 2], [6], []]) print(rt.values) tf.Tensor([3 1 4 1 5 9 2 6], shape=(8,), dtype=int32) print(rt.row_starts()) # indices of row starts in rt.values tf.Tensor([0 4 4 7 8], shape=(5,), dtype=int64)
to_list
to_list()
Возвращает вложенный список Python list со значениями этого RaggedTensor.
Требуется, чтобы rt был создан в режиме eager execution.
| Возвращает | |
|---|---|
Вложенный список Python list. |
to_sparse
to_sparse(
name=None
)
Преобразует этот RaggedTensor в tf.sparse.SparseTensor.
Пример:
rt = tf.ragged.constant([[1, 2, 3], [4], [], [5, 6]])
print(rt.to_sparse())
SparseTensor(indices=tf.Tensor(
[[0 0] [0 1] [0 2] [1 0] [3 0] [3 1]],
shape=(6, 2), dtype=int64),
values=tf.Tensor([1 2 3 4 5 6], shape=(6,), dtype=int32),
dense_shape=tf.Tensor([4 3], shape=(2,), dtype=int64))| Аргументы | |
|---|---|
name | Необязательный префикс имени для возвращаемых тензоров. |
| Возвращает | |
|---|---|
SparseTensor с теми же значениями, что и у self. |
to_tensor
to_tensor(
default_value=None, name=None, shape=None
)
Преобразует этот RaggedTensor в tf.Tensor.
Если указан shape, результат дополняется значениями заполнения и/или усекается до заданной формы.
Примеры:
rt = tf.ragged.constant([[9, 8, 7], [], [6, 5], [4]])
print(rt.to_tensor())
tf.Tensor(
[[9 8 7] [0 0 0] [6 5 0] [4 0 0]], shape=(4, 3), dtype=int32)
print(rt.to_tensor(shape=[5, 2]))
tf.Tensor(
[[9 8] [0 0] [6 5] [4 0] [0 0]], shape=(5, 2), dtype=int32)| Аргументы | |
|---|---|
default_value | Значение для индексов, не заданных в self. По умолчанию равно нулю. default_value должно допускать широковещательное распространение до self.shape[self.ragged_rank + 1:]. |
name | Необязательный префикс имени для возвращаемых тензоров. |
shape | Форма результирующего плотного тензора. В частности, result.shape[i] равно shape[i] (если shape[i] не равно None) или self.bounding_shape(i) (в противном случае). shape.rank должно быть None или равно self.rank. |
| Возвращает | |
|---|---|
Tensor с формой ragged.bounding_shape(self) и значениями, заданными непустыми значениями в self. Пустым значениям присваивается default_value. |
value_rowids
value_rowids(
name=None
)
Возвращает индексы строк для values в этом ragged-тензоре.
rt.value_rowids() однозначно соответствует самому внешнему измерению rt.values и указывает строку, содержащую каждое значение. В частности, строка rt[row] состоит из значений rt.values[j], где rt.value_rowids()[j] == row.
| Аргументы | |
|---|---|
name | Необязательный префикс имени для возвращаемого тензора. |
| Возвращает | |
|---|---|
Одномерный целочисленный Tensor с формой self.values.shape[:1]. Возвращаемый тензор неотрицателен и отсортирован по возрастанию. |
Пример:
rt = tf.ragged.constant([[3, 1, 4, 1], [], [5, 9, 2], [6], []]) print(rt.values) tf.Tensor([3 1 4 1 5 9 2 6], shape=(8,), dtype=int32) print(rt.value_rowids()) # corresponds 1:1 with rt.values tf.Tensor([0 0 0 0 2 2 2 3], shape=(8,), dtype=int64)
with_flat_values
with_flat_values(
new_values
)
Возвращает копию self, в которой flat_values заменено на new_value.
Если они содержат значения, сохраняются кэшированные тензоры разбиения на строки, например self.cached_nrows и self.cached_value_rowids.
| Аргументы | |
|---|---|
new_values | Потенциально нерегулярный тензор, который должен заменить self.flat_values. Должен иметь rank > 0 и такое же число строк, как self.flat_values. |
| Возвращает | |
|---|---|
RaggedTensor. result.rank = self.ragged_rank + new_values.rank. result.ragged_rank = self.ragged_rank + new_values.ragged_rank. |
with_row_splits_dtype
with_row_splits_dtype(
dtype
)
Возвращает копию этого RaggedTensor с заданным типом данных row_splits.
Для RaggedTensor с несколькими нерегулярными измерениями тип данных row_splits всех вложенных объектов RaggedTensor приводится к заданному типу.
| Аргументы | |
|---|---|
dtype | Тип данных для row_splits. Один из типов tf.int32 или tf.int64. |
| Возвращает | |
|---|---|
Копию этого RaggedTensor, в которой row_splits приведено к заданному типу. |
with_values
with_values(
new_values
)
Возвращает копию self, в которой values заменено на new_value.
Если они содержат значения, сохраняются кэшированные тензоры разбиения на строки, например self.cached_nrows и self.cached_value_rowids.
| Аргументы | |
|---|---|
new_values | Потенциально нерегулярный тензор, используемый в качестве values для возвращаемого RaggedTensor. Должен иметь rank > 0 и такое же число строк, как self.values. |
| Возвращает | |
|---|---|
RaggedTensor. result.rank = 1 + new_values.rank. result.ragged_rank = 1 + new_values.ragged_rank |
__abs__
__abs__(
name=None
)
Вычисляет абсолютное значение ragged-тензора.
Для заданного рваного тензора целочисленных значений или значений с плавающей точкой эта операция возвращает рваный тензор того же типа, каждый элемент которого содержит абсолютное значение соответствующего элемента входных данных.
Для заданного рваного тензора x комплексных чисел эта операция возвращает тензор типа float32 или float64, содержащий абсолютное значение каждого элемента в x. Для комплексного числа \(a + bj\) абсолютное значение вычисляется как \(\sqrt{a^2 + b^2}\).
Например:
# real number x = tf.ragged.constant([[-2.2, 3.2], [-4.2]]) tf.abs(x) <tf.RaggedTensor [[2.2, 3.2], [4.2]]>
# complex number x = tf.ragged.constant([[-2.2 + 4.7j], [-3.2 + 5.7j], [-4.2 + 6.7j]]) tf.abs(x) <tf.RaggedTensor [[5.189412298131649], [6.536818798161687], [7.907591289387685]]>
| Аргументы | |
|---|---|
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
RaggedTensor того же размера и типа, что и x, с абсолютными значениями. Обратите внимание: для входных данных типа complex64 или complex128 возвращаемый RaggedTensor будет иметь тип float32 или float64 соответственно. |
__add__
__add__(
y, name=None
)
Возвращает поэлементную сумму x + y.
Примеры использования приведены ниже.
Сложение скаляра и списка:
x = [1, 2, 3, 4, 5] y = 1 tf.add(x, y) <tf.Tensor: shape=(5,), dtype=int32, numpy=array([2, 3, 4, 5, 6], dtype=int32)>
Обратите внимание, что вместо этого можно использовать бинарный оператор +:
x = tf.convert_to_tensor([1, 2, 3, 4, 5]) y = tf.convert_to_tensor(1) x + y <tf.Tensor: shape=(5,), dtype=int32, numpy=array([2, 3, 4, 5, 6], dtype=int32)>
Сложение тензора и списка той же формы:
x = [1, 2, 3, 4, 5] y = tf.constant([1, 2, 3, 4, 5]) tf.add(x, y) <tf.Tensor: shape=(5,), dtype=int32, numpy=array([ 2, 4, 6, 8, 10], dtype=int32)>
Например:
x = tf.constant([1, 2], dtype=tf.int8) y = [2**7 + 1, 2**7 + 2] tf.add(x, y) <tf.Tensor: shape=(2,), dtype=int8, numpy=array([-126, -124], dtype=int8)>
При сложении двух входных значений разной формы Add следует правилам вещания NumPy. Формы двух входных массивов сравниваются поэлементно. Начиная с последних измерений, размеры должны совпадать либо один из них должен быть равен 1.
Например:
x = np.ones(6).reshape(1, 2, 1, 3) y = np.ones(6).reshape(2, 1, 3, 1) tf.add(x, y).shape.as_list() [2, 2, 3, 3]
Еще один пример с двумя массивами разной размерности.
x = np.ones([1, 2, 1, 4]) y = np.ones([3, 4]) tf.add(x, y).shape.as_list() [1, 2, 3, 4]
Версия этой поэлементной операции с редукцией — tf.math.reduce_sum
| Аргументы | |
|---|---|
x | Объект tf.Tensor. Должен иметь один из следующих типов: bfloat16, half, float16, float32, float64, uint8, uint16, uint32, uint64, int8, int16, int32, int64, complex64, complex128, string. |
y | Объект tf.Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
__and__
__and__(
y, name=None
)
Возвращает поэлементное логическое значение операции x & y.
Функция логического И.
Формы x и y должны совпадать или быть совместимыми для вещания. Например, y может быть:
- Одним логическим значением Python; в этом случае логическое И с этим значением будет вычислено для каждого элемента в
x. - Объектом
tf.Tensorтипаtf.boolтой же формы или формы, совместимой для вещания. В этом случае результатом будет поэлементное логическое И дляxиy. - Объектом
tf.RaggedTensorтипаtf.boolтой же формы или формы, совместимой для вещания. В этом случае результатом будет поэлементное логическое И дляxиy.
Например:
# `y` is a Python boolean x = tf.ragged.constant([[True, False], [True]]) y = True x & y <tf.RaggedTensor [[True, False], [True]]> tf.math.logical_and(x, y) # Equivalent of x & y <tf.RaggedTensor [[True, False], [True]]> y & x <tf.RaggedTensor [[True, False], [True]]> tf.math.reduce_all(x & y) # Reduce to a scalar bool Tensor. <tf.Tensor: shape=(), dtype=bool, numpy=False>
# `y` is a tf.Tensor of the same shape. x = tf.ragged.constant([[True, False], [True, False]]) y = tf.constant([[True, False], [False, True]]) x & y <tf.RaggedTensor [[True, False], [False, False]]>
# `y` is a tf.Tensor of a broadcast-compatible shape. x = tf.ragged.constant([[True, False], [True]]) y = tf.constant([[True], [False]]) x & y <tf.RaggedTensor [[True, False], [False]]>
# `y` is a `tf.RaggedTensor` of the same shape. x = tf.ragged.constant([[True, False], [True]]) y = tf.ragged.constant([[False, True], [True]]) x & y <tf.RaggedTensor [[False, False], [True]]>
# `y` is a `tf.RaggedTensor` of a broadcast-compatible shape. x = tf.ragged.constant([[[True, True, False]], [[]], [[True, False]]]) y = tf.ragged.constant([[[True]], [[True]], [[False]]], ragged_rank=1) x & y <tf.RaggedTensor [[[True, True, False]], [[]], [[False, False]]]>
| Аргументы | |
|---|---|
y | Логическое значение Python либо объект tf.Tensor или tf.RaggedTensor типа tf.bool. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Объект tf.RaggedTensor типа tf.bool с формой, до которой происходит вещание x и y. |
__bool__
__bool__()
Вызывает TypeError, если RaggedTensor используется как логическое значение Python.
Чтобы предотвратить использование RaggedTensor в качестве логического значения, эта функция всегда вызывает TypeError при вызове.
Например:
x = tf.ragged.constant([[1, 2], [3]]) result = True if x else False # Evaluate x as a bool value. Traceback (most recent call last): TypeError: RaggedTensor may not be used as a boolean.
x = tf.ragged.constant([[1]]) r = (x == 1) # tf.RaggedTensor [[True]] if r: # Evaluate r as a bool value. pass Traceback (most recent call last): TypeError: RaggedTensor may not be used as a boolean.
__div__
__div__(
y, name=None
)
Поэлементно делит x на y (согласно семантике оператора деления Python 2). (Устарело)
Эта функция делит x на y, принудительно используя семантику Python 2. То есть, если x и y — целые числа, результат также будет целым числом. Это отличается от Python 3, где деление с помощью / всегда возвращает число с плавающей точкой, а деление с помощью // всегда возвращает целое число.
| Аргументы | |
|---|---|
x | Tensor — числитель вещественного числового типа. |
y | Tensor — знаменатель вещественного числового типа. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
x / y возвращает частное от деления x на y. |
Переход на TF2
Эта функция устарела в TF2. Предпочтительно использовать оператор деления тензоров, tf.divide или tf.math.divide, которые соответствуют семантике оператора деления Python 3.
__eq__
__eq__(
other
)
Возвращает результат поэлементного сравнения == или False, если формы несовместимы для вещания.
Поэлементно сравнивает два рваных тензора на равенство, если их формы совместимы для вещания; в противном случае возвращает False.
Обратите внимание, что такое поведение отличается от поведения tf.math.equal, которое вызывает исключение, если формы двух рваных тензоров несовместимы для вещания.
Например:
rt1 = tf.ragged.constant([[1, 2], [3]]) rt1 == rt1 <tf.RaggedTensor [[True, True], [True]]>
rt2 = tf.ragged.constant([[1, 2], [4]]) rt1 == rt2 <tf.RaggedTensor [[True, True], [False]]>
rt3 = tf.ragged.constant([[1, 2], [3, 4]]) # rt1 and rt3 are not broadcast-compatible. rt1 == rt3 False
# You can also compare a `tf.RaggedTensor` to a `tf.Tensor`. t = tf.constant([[1, 2], [3, 4]]) rt1 == t False t == rt1 False rt4 = tf.ragged.constant([[1, 2], [3, 4]]) rt4 == t <tf.RaggedTensor [[True, True], [True, True]]> t == rt4 <tf.RaggedTensor [[True, True], [True, True]]>
| Аргументы | |
|---|---|
other | Правая часть оператора ==. |
| Возвращает | |
|---|---|
Результат поэлементной операции == в виде рваного тензора либо False, если аргументы несовместимы для вещания. |
__floordiv__
__floordiv__(
y, name=None
)
Поэлементно делит x / y, округляя результат в сторону наименьшего целого.
С математической точки зрения это эквивалентно floor(x / y). Например: floor(8.4 / 4.0) = floor(2.1) = 2.0 floor(-8.4 / 4.0) = floor(-2.1) = -3.0 Это эквивалентно оператору '//' в Python 3.0 и более поздних версиях.
Примечание:xиyдолжны иметь одинаковый тип, и результат также будет иметь этот тип.
| Аргументы | |
|---|---|
x | Tensor — числитель вещественного числового типа. |
y | Tensor — знаменатель вещественного числового типа. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
x / y, округленное в сторону минус бесконечности. |
| Вызывает исключение | |
|---|---|
TypeError | Если входные данные являются комплексными числами. |
__ge__
__ge__(
other
)
Поэлементное сравнение >= двух значений, преобразуемых в рваные тензоры.
Вычисляет поэлементное сравнение >= двух значений, преобразуемых в рваные тензоры, с поддержкой вещания. Вызывает исключение, если значения несовместимы для вещания.
Например:
rt1 = tf.ragged.constant([[1, 2], [3]]) rt1 >= rt1 <tf.RaggedTensor [[True, True], [True]]>
rt2 = tf.ragged.constant([[2, 1], [3]]) rt1 >= rt2 <tf.RaggedTensor [[False, True], [True]]>
rt3 = tf.ragged.constant([[1, 2], [3, 4]]) # rt1 and rt3 are not broadcast-compatible. rt1 >= rt3 Traceback (most recent call last): InvalidArgumentError: ...
# You can also compare a `tf.RaggedTensor` to a `tf.Tensor`. rt4 = tf.ragged.constant([[1, 2],[3, 4]]) t1 = tf.constant([[2, 1], [4, 3]]) rt4 >= t1 <tf.RaggedTensor [[False, True], [False, True]]> t1 >= rt4 <tf.RaggedTensor [[True, False], [True, False]]>
# Compares a `tf.RaggedTensor` to a `tf.Tensor` with broadcasting. t2 = tf.constant([[2]]) rt4 >= t2 <tf.RaggedTensor [[False, True], [True, True]]> t2 >= rt4 <tf.RaggedTensor [[True, True], [False, False]]>
| Аргументы | |
|---|---|
other | Правая часть оператора >=. |
| Возвращает | |
|---|---|
Объект tf.RaggedTensor типа tf.bool с формой, до которой происходит вещание self и other. |
| Вызывает исключение | |
|---|---|
InvalidArgumentError | Если self и other несовместимы для вещания. |
__getitem__
__getitem__(
key
)
Возвращает указанную часть этого RaggedTensor.
Поддерживает многомерную индексацию и срезы со следующим ограничением: индексация по внутреннему рваному измерению запрещена. Этот случай проблематичен, поскольку указанное значение может существовать в одних строках и отсутствовать в других. В таких случаях не очевидно, следует ли (1) сообщить об IndexError; (2) использовать значение по умолчанию; или (3) пропустить это значение и вернуть тензор с меньшим числом строк, чем исходный. Следуя руководящим принципам Python («В условиях неоднозначности не поддавайтесь искушению угадать»), мы просто запрещаем эту операцию.
| Аргументы | |
|---|---|
rt_input | RaggedTensor, из которого нужно получить срез. |
key | Указывает, какую часть RaggedTensor нужно вернуть, используя стандартную семантику Python (например, отрицательные значения задают индекс с конца). key может иметь один из следующих типов:
|
| Возвращает | |
|---|---|
Объект Tensor или RaggedTensor. Значения, содержащие хотя бы одно рваное измерение, возвращаются как RaggedTensor. Значения без рваных измерений возвращаются как Tensor. Примеры выражений, возвращающих Tensor и RaggedTensor, см. выше. |
| Вызывает исключение | |
|---|---|
ValueError | Если key выходит за границы допустимого диапазона. |
ValueError | Если key не поддерживается. |
TypeError | Если индексы в key имеют неподдерживаемый тип. |
Примеры:
# A 2-D ragged tensor with 1 ragged dimension. rt = tf.ragged.constant([['a', 'b', 'c'], ['d', 'e'], ['f'], ['g']]) rt[0].numpy() # First row (1-D `Tensor`) array([b'a', b'b', b'c'], dtype=object) rt[:3].to_list() # First three rows (2-D RaggedTensor) [[b'a', b'b', b'c'], [b'd', b'e'], [b'f']] rt[3, 0].numpy() # 1st element of 4th row (scalar) b'g'
# A 3-D ragged tensor with 2 ragged dimensions.
rt = tf.ragged.constant([[[1, 2, 3], [4]],
[[5], [], [6]],
[[7]],
[[8, 9], [10]]])
rt[1].to_list() # Second row (2-D RaggedTensor)
[[5], [], [6]]
rt[3, 0].numpy() # First element of fourth row (1-D Tensor)
array([8, 9], dtype=int32)
rt[:, 1:3].to_list() # Items 1-3 of each row (3-D RaggedTensor)
[[[4]], [[], [6]], [], [[10]]]
rt[:, -1:].to_list() # Last item of each row (3-D RaggedTensor)
[[[4]], [[6]], [[7]], [[10]]]__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
) -> Annotated[Any, tf.raw_ops.Any]
Поэлементно возвращает логическое значение NOT x.
Пример:
tf.math.logical_not(tf.constant([True, False])) <tf.Tensor: shape=(2,), dtype=bool, numpy=array([False, True])>
| Аргументы | |
|---|---|
x | Tensor типа bool. Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Tensor типа bool. |
__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 | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Tensor типа bool. |
__mod__
__mod__(
y: Annotated[Any, tf.raw_ops.Any],
name=None
) -> Annotated[Any, tf.raw_ops.Any]
Поэлементно возвращает остаток от деления.
Функция следует семантике Python: результат соответствует округлению частного вниз. Например, floor(x / y) * y + floormod(x, y) = x независимо от знаков x и y.
Примечание: math.floormod поддерживает вещание. Подробнее о вещании см. здесь.
| Аргументы | |
|---|---|
x | Tensor. Должен иметь один из следующих типов: int8, int16, int32, int64, uint8, uint16, uint32, uint64, bfloat16, half, float32, float64. |
y | Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Tensor. Имеет тот же тип, что и x. |
__mul__
__mul__(
y, name=None
)
Возвращает поэлементное произведение x * y.
Например:
x = tf.constant(([1, 2, 3, 4])) tf.math.multiply(x, x) <tf.Tensor: shape=(4,), dtype=..., numpy=array([ 1, 4, 9, 16], dtype=int32)>
Поскольку tf.math.multiply преобразует аргументы в Tensorы, можно также передавать аргументы, не являющиеся Tensor:
tf.math.multiply(7,6) <tf.Tensor: shape=(), dtype=int32, numpy=42>
Если x.shape не совпадает с y.shape, их формы будут приведены к совместимым. (Подробнее о вещании см. здесь.)
Например:
x = tf.ones([1, 2]);
y = tf.ones([2, 1]);
x * y # Taking advantage of operator overriding
<tf.Tensor: shape=(2, 2), dtype=float32, numpy=
array([[1., 1.],
[1., 1.]], dtype=float32)>Версия этой поэлементной операции с редукцией — tf.math.reduce_prod
| Аргументы | |
|---|---|
x | Тензор. Должен иметь один из следующих типов: bfloat16, half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128. |
y | Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращает |
|---|
Tensor. Имеет тот же тип, что и x.
| Вызывает исключение | |
|---|---|
|
__ne__
__ne__(
other
)
Операция, вызываемая оператором Tensor.ne.
Поэлементно сравнивает два тензора на неравенство, если их формы совместимы для вещания; в противном случае возвращает True. (Обратите внимание, что это поведение отличается от поведения tf.math.not_equal, которое вызывает исключение, если формы двух тензоров несовместимы для вещания.)
| Назначение в API | |
|---|---|
Этот метод представлен в API TensorFlow, чтобы разработчики библиотек могли регистрировать диспетчеризацию для Tensor.ne и обеспечивать поддержку пользовательских составных тензоров и других пользовательских объектов. Символ API не предназначен для прямого вызова пользователями, но включен в автоматически сгенерированную документацию TensorFlow. |
| Аргументы | |
|---|---|
self | Левая часть оператора !=. |
other | Правая часть оператора !=. |
| Возвращает | |
|---|---|
Результат поэлементной операции != либо True, если аргументы несовместимы для вещания. |
__neg__
__neg__(
name=None
) -> Annotated[Any, tf.raw_ops.Any]
Поэлементно вычисляет отрицательное числовое значение.
То есть \(y = -x\).
| Аргументы | |
|---|---|
x | Tensor. Должен иметь один из следующих типов: bfloat16, half, float32, float64, int8, int16, int32, int64, complex64, complex128. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Tensor. Имеет тот же тип, что и x. Если |
__nonzero__
__nonzero__()
Вызывает TypeError, если RaggedTensor используется как логическое значение Python.
Чтобы предотвратить использование RaggedTensor в качестве логического значения, эта функция всегда вызывает TypeError при вызове.
Например:
x = tf.ragged.constant([[1, 2], [3]]) result = True if x else False # Evaluate x as a bool value. Traceback (most recent call last): TypeError: RaggedTensor may not be used as a boolean.
x = tf.ragged.constant([[1]]) r = (x == 1) # tf.RaggedTensor [[True]] if r: # Evaluate r as a bool value. pass Traceback (most recent call last): TypeError: RaggedTensor may not be used as a boolean.
__or__
__or__(
y: Annotated[Any, tf.raw_ops.Any],
name=None
) -> Annotated[Any, tf.raw_ops.Any]
Возвращает поэлементное логическое значение x ИЛИ y.
Функция логического ИЛИ.
Требуется, чтобы x и y имели одинаковую форму или совместимые для трансляции формы. Например, x и y могут быть:
- Двумя отдельными элементами типа
bool. - Одним
tf.Tensorтипаboolи одним отдельнымbool; в этом случае результат вычисляется путём применения логического ИЛИ с отдельным элементом к каждому элементу большего тензора. - Двумя объектами
tf.Tensorтипаboolодинаковой формы. В этом случае результатом будет поэлементное логическое ИЛИ двух входных тензоров.
Вместо этого также можно использовать оператор |.
| Использование | |
|---|---|
>>> a = tf.constant([True]) >>> b = tf.constant([False]) >>> tf.math.logical_or(a, b) <tf.Tensor: shape=(1,), dtype=bool, numpy=array([ True])> >>> a | b <tf.Tensor: shape=(1,), dtype=bool, numpy=array([ True])> c = tf.constant([False]) x = tf.constant([False, True, True, False]) tf.math.logical_or(c, x) <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, True, True, False])> 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_or(y, z) <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, True, True, True])> y | z <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, True, True, True])> Эта операция также поддерживает трансляцию tf.logical_or([[True, False]], [[True], [False]])
<tf.Tensor: shape=(2, 2), dtype=bool, numpy=
array([[ True, True],
[ True, False]])> |
Версия этой поэлементной операции со сведением — tf.math.reduce_any.
| Аргументы | |
|---|---|
x | tf.Tensor типа bool. |
y | tf.Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
tf.Tensor типа bool с формой, к которой транслируются x и y. |
| Аргументы | |
|---|---|
x | Tensor типа bool. |
y | Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Tensor типа bool. |
__pow__
__pow__(
y, name=None
)
Вычисляет степень одного значения относительно другого.
Для заданных тензора x и тензора y эта операция вычисляет \(x^y\) для соответствующих элементов x и y. Например:
x = tf.constant([[2, 2], [3, 3]]) y = tf.constant([[8, 16], [2, 3]]) tf.pow(x, y) # [[256, 65536], [9, 27]]
| Аргументы | |
|---|---|
x | Tensor типа float16, float32, float64, int32, int64, complex64 или complex128. |
y | Tensor типа float16, float32, float64, int32, int64, complex64 или complex128. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Tensor. |
__radd__
__radd__(
y, name=None
)
Возвращает поэлементную сумму x + y.
Примеры использования приведены ниже.
Сложение скалярного значения и списка:
x = [1, 2, 3, 4, 5] y = 1 tf.add(x, y) <tf.Tensor: shape=(5,), dtype=int32, numpy=array([2, 3, 4, 5, 6], dtype=int32)>
Обратите внимание, что вместо этого можно использовать бинарный оператор +:
x = tf.convert_to_tensor([1, 2, 3, 4, 5]) y = tf.convert_to_tensor(1) x + y <tf.Tensor: shape=(5,), dtype=int32, numpy=array([2, 3, 4, 5, 6], dtype=int32)>
Сложение тензора и списка такой же формы:
x = [1, 2, 3, 4, 5] y = tf.constant([1, 2, 3, 4, 5]) tf.add(x, y) <tf.Tensor: shape=(5,), dtype=int32, numpy=array([ 2, 4, 6, 8, 10], dtype=int32)>
Например,
x = tf.constant([1, 2], dtype=tf.int8) y = [2**7 + 1, 2**7 + 2] tf.add(x, y) <tf.Tensor: shape=(2,), dtype=int8, numpy=array([-126, -124], dtype=int8)>
При сложении двух входных значений разной формы Add следует правилам трансляции NumPy. Формы двух входных массивов сравниваются поэлементно. Начиная с конечных измерений, измерения должны быть равны либо одно из них должно быть равно 1.
Например,
x = np.ones(6).reshape(1, 2, 1, 3) y = np.ones(6).reshape(2, 1, 3, 1) tf.add(x, y).shape.as_list() [2, 2, 3, 3]
Ещё один пример с двумя массивами разной размерности.
x = np.ones([1, 2, 1, 4]) y = np.ones([3, 4]) tf.add(x, y).shape.as_list() [1, 2, 3, 4]
Версия этой поэлементной операции со сведением — tf.math.reduce_sum
| Аргументы | |
|---|---|
x | tf.Tensor. Должен иметь один из следующих типов: bfloat16, half, float16, float32, float64, uint8, uint16, uint32, uint64, int8, int16, int32, int64, complex64, complex128, string. |
y | tf.Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно) |
__rand__
__rand__(
y, name=None
)
Возвращает поэлементное логическое значение x & y.
Функция логического И.
Требуется, чтобы x и y имели одинаковую форму или совместимые для трансляции формы. Например, y может быть:
- Отдельным логическим значением Python; в этом случае результат вычисляется путём применения логического И с этим отдельным элементом к каждому элементу
x. - Объектом
tf.Tensorс типом данныхtf.bool, имеющим ту же форму или совместимую для трансляции форму. В этом случае результатом будет поэлементное логическое Иxиy. - Объектом
tf.RaggedTensorс типом данныхtf.bool, имеющим ту же форму или совместимую для трансляции форму. В этом случае результатом будет поэлементное логическое Иxиy.
Например:
# `y` is a Python boolean x = tf.ragged.constant([[True, False], [True]]) y = True x & y <tf.RaggedTensor [[True, False], [True]]> tf.math.logical_and(x, y) # Equivalent of x & y <tf.RaggedTensor [[True, False], [True]]> y & x <tf.RaggedTensor [[True, False], [True]]> tf.math.reduce_all(x & y) # Reduce to a scalar bool Tensor. <tf.Tensor: shape=(), dtype=bool, numpy=False>
# `y` is a tf.Tensor of the same shape. x = tf.ragged.constant([[True, False], [True, False]]) y = tf.constant([[True, False], [False, True]]) x & y <tf.RaggedTensor [[True, False], [False, False]]>
# `y` is a tf.Tensor of a broadcast-compatible shape. x = tf.ragged.constant([[True, False], [True]]) y = tf.constant([[True], [False]]) x & y <tf.RaggedTensor [[True, False], [False]]>
# `y` is a `tf.RaggedTensor` of the same shape. x = tf.ragged.constant([[True, False], [True]]) y = tf.ragged.constant([[False, True], [True]]) x & y <tf.RaggedTensor [[False, False], [True]]>
# `y` is a `tf.RaggedTensor` of a broadcast-compatible shape. x = tf.ragged.constant([[[True, True, False]], [[]], [[True, False]]]) y = tf.ragged.constant([[[True]], [[True]], [[False]]], ragged_rank=1) x & y <tf.RaggedTensor [[[True, True, False]], [[]], [[False, False]]]>
| Аргументы | |
|---|---|
y | Логическое значение Python, tf.Tensor или tf.RaggedTensor с типом данных tf.bool. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
tf.RaggedTensor с типом данных tf.bool и формой, к которой транслируются x и y. |
__rdiv__
__rdiv__(
y, name=None
)
Делит x / y поэлементно (с использованием семантики оператора деления Python 2). (устарело)
Эта функция делит x на y, принудительно используя семантику Python 2. То есть, если x и y являются целыми числами, результат также будет целым числом. Это отличается от Python 3, где деление с / всегда возвращает число с плавающей точкой, а деление с // всегда возвращает целое число.
| Аргументы | |
|---|---|
x | Tensor — числитель вещественного числового типа. |
y | Tensor — знаменатель вещественного числового типа. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
x / y возвращает частное x и y. |
Переход на TF2
Эта функция устарела в TF2. Предпочтительно использовать оператор деления тензоров, tf.divide или tf.math.divide, которые соответствуют семантике оператора деления Python 3.
__rfloordiv__
__rfloordiv__(
y, name=None
)
Делит x / y поэлементно, округляя в сторону наименьшего целого.
Математически это эквивалентно floor(x / y). Например: floor(8.4 / 4.0) = floor(2.1) = 2.0 floor(-8.4 / 4.0) = floor(-2.1) = -3.0 Это эквивалентно оператору '//' в Python 3.0 и более поздних версиях.
Примечание:xиyдолжны иметь одинаковый тип; результат также будет иметь этот тип.
| Аргументы | |
|---|---|
x | Tensor — числитель вещественного числового типа. |
y | Tensor — знаменатель вещественного числового типа. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
x / y, округлённое в сторону −бесконечности. |
| Исключения | |
|---|---|
TypeError | Если входные значения комплексные. |
__rmod__
__rmod__(
y: Annotated[Any, tf.raw_ops.Any],
name=None
) -> Annotated[Any, tf.raw_ops.Any]
Возвращает остаток от деления поэлементно.
Это соответствует семантике Python: результат согласован с делением с округлением вниз. Например, floor(x / y) * y + floormod(x, y) = x независимо от знаков x и y.
Примечание: math.floormod поддерживает трансляцию. Подробнее о трансляции можно узнать здесь
| Аргументы | |
|---|---|
x | Tensor. Должен иметь один из следующих типов: int8, int16, int32, int64, uint8, uint16, uint32, uint64, bfloat16, half, float32, float64. |
y | Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Tensor. Имеет тот же тип, что и x. |
__rmul__
__rmul__(
y, name=None
)
Возвращает поэлементное произведение x * y.
Например:
x = tf.constant(([1, 2, 3, 4])) tf.math.multiply(x, x) <tf.Tensor: shape=(4,), dtype=..., numpy=array([ 1, 4, 9, 16], dtype=int32)>
Поскольку tf.math.multiply преобразует свои аргументы в Tensor, можно также передавать аргументы, не являющиеся Tensor:
tf.math.multiply(7,6) <tf.Tensor: shape=(), dtype=int32, numpy=42>
Если x.shape не совпадает с y.shape, они будут транслированы к совместимой форме. (Подробнее о трансляции можно узнать здесь.)
Например:
x = tf.ones([1, 2]);
y = tf.ones([2, 1]);
x * y # Taking advantage of operator overriding
<tf.Tensor: shape=(2, 2), dtype=float32, numpy=
array([[1., 1.],
[1., 1.]], dtype=float32)>Версия этой поэлементной операции со сведением — tf.math.reduce_prod
| Аргументы | |
|---|---|
x | Тензор. Должен иметь один из следующих типов: bfloat16, half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128. |
y | Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение |
|---|
Tensor. Имеет тот же тип, что и x.
| Исключения | |
|---|---|
|
__ror__
__ror__(
y: Annotated[Any, tf.raw_ops.Any],
name=None
) -> Annotated[Any, tf.raw_ops.Any]
Возвращает поэлементное логическое значение x ИЛИ y.
Функция логического ИЛИ.
Требуется, чтобы x и y имели одинаковую форму или совместимые для трансляции формы. Например, x и y могут быть:
- Двумя отдельными элементами типа
bool. - Одним
tf.Tensorтипаboolи одним отдельнымbool; в этом случае результат вычисляется путём применения логического ИЛИ с отдельным элементом к каждому элементу большего тензора. - Двумя объектами
tf.Tensorтипаboolодинаковой формы. В этом случае результатом будет поэлементное логическое ИЛИ двух входных тензоров.
Вместо этого также можно использовать оператор |.
| Использование | |
|---|---|
>>> a = tf.constant([True]) >>> b = tf.constant([False]) >>> tf.math.logical_or(a, b) <tf.Tensor: shape=(1,), dtype=bool, numpy=array([ True])> >>> a | b <tf.Tensor: shape=(1,), dtype=bool, numpy=array([ True])> c = tf.constant([False]) x = tf.constant([False, True, True, False]) tf.math.logical_or(c, x) <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, True, True, False])> 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_or(y, z) <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, True, True, True])> y | z <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, True, True, True])> Эта операция также поддерживает трансляцию tf.logical_or([[True, False]], [[True], [False]])
<tf.Tensor: shape=(2, 2), dtype=bool, numpy=
array([[ True, True],
[ True, False]])> |
Версия этой поэлементной операции со сведением — tf.math.reduce_any.
| Аргументы | |
|---|---|
x | tf.Tensor типа bool. |
y | tf.Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
tf.Tensor типа bool с формой, к которой транслируются x и y. |
| Аргументы | |
|---|---|
x | Tensor типа bool. |
y | Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Tensor типа bool. |
__rpow__
__rpow__(
y, name=None
)
Вычисляет степень одного значения относительно другого.
Для заданных тензора x и тензора y эта операция вычисляет \(x^y\) для соответствующих элементов x и y. Например:
x = tf.constant([[2, 2], [3, 3]]) y = tf.constant([[8, 16], [2, 3]]) tf.pow(x, y) # [[256, 65536], [9, 27]]
| Аргументы | |
|---|---|
x | Tensor типа float16, float32, float64, int32, int64, complex64 или complex128. |
y | Tensor типа float16, float32, float64, int32, int64, complex64 или complex128. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Tensor. |
__rsub__
__rsub__(
y, name=None
)
Возвращает поэлементную разность x - y.
Примечание: tf.subtract поддерживает трансляцию. Подробнее о трансляции можно узнать здесь
Диапазон входных и выходных значений — (-inf, inf).
Примеры использования приведены ниже.
Вычитание скалярного значения из массива:
x = [1, 2, 3, 4, 5] y = 1 tf.subtract(x, y) <tf.Tensor: shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4], dtype=int32)> tf.subtract(y, x) <tf.Tensor: shape=(5,), dtype=int32, numpy=array([ 0, -1, -2, -3, -4], dtype=int32)>
Обратите внимание, что вместо этого можно использовать бинарный оператор -:
x = tf.convert_to_tensor([1, 2, 3, 4, 5]) y = tf.convert_to_tensor(1) x - y <tf.Tensor: shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4], dtype=int32)>
Вычитание тензора той же формы из массива:
x = [1, 2, 3, 4, 5] y = tf.constant([5, 4, 3, 2, 1]) tf.subtract(y, x) <tf.Tensor: shape=(5,), dtype=int32, numpy=array([ 4, 2, 0, -2, -4], dtype=int32)>
Например,
x = tf.constant([1, 2], dtype=tf.int8) y = [2**8 + 1, 2**8 + 2] tf.subtract(x, y) <tf.Tensor: shape=(2,), dtype=int8, numpy=array([0, 0], dtype=int8)>
При вычитании двух входных значений разной формы tf.subtract следует общим правилам трансляции . Формы двух входных массивов сравниваются поэлементно. Начиная с конечных измерений, измерения должны быть равны либо одно из них должно быть равно 1.
Например,
x = np.ones(6).reshape(2, 3, 1)
y = np.ones(6).reshape(2, 1, 3)
tf.subtract(x, y)
<tf.Tensor: shape=(2, 3, 3), dtype=float64, numpy=
array([[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]])>Пример с входными данными разной размерности:
x = np.ones(6).reshape(2, 3, 1)
y = np.ones(6).reshape(1, 6)
tf.subtract(x, y)
<tf.Tensor: shape=(2, 3, 6), dtype=float64, numpy=
array([[[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]]])>| Аргументы | |
|---|---|
x | Tensor. Должен иметь один из следующих типов: bfloat16, half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128, uint32, uint64. |
y | Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Tensor. Имеет тот же тип, что и x. |
__rtruediv__
__rtruediv__(
y, name=None
)
Делит x / y поэлементно (с использованием семантики оператора деления Python 3).
Примечание: Предпочтительно использовать оператор тензора или tf.divide, которые соответствуют семантике оператора деления Python.
Эта функция принудительно использует семантику оператора деления Python 3: все целочисленные аргументы сначала преобразуются в типы с плавающей точкой. Эта операция создаётся при обычном делении x / y в Python 3 и в Python 2.7 с from __future__ import division. Для целочисленного деления с округлением вниз используйте x // y или tf.math.floordiv.
x и y должны иметь одинаковый числовой тип. Если входные значения имеют тип с плавающей точкой, выходное значение будет того же типа. Если входные значения целочисленные, они преобразуются к float32 для int8 и int16 и к float64 для int32 и int64 (в соответствии с поведением NumPy).
| Аргументы | |
|---|---|
x | Tensor — числитель числового типа. |
y | Tensor — знаменатель числового типа. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
x / y, вычисленное с плавающей точкой. |
| Исключения | |
|---|---|
TypeError | Если x и y имеют разные типы данных. |
__rxor__
__rxor__(
y, name='LogicalXor'
)
Функция логического исключающего ИЛИ.
x ^ y = (x | y) & ~(x & y)
Требуется, чтобы x и y имели одинаковую форму или совместимые для трансляции формы. Например, x и y могут быть:
- Двумя отдельными элементами типа
bool - Одним
tf.Tensorтипаboolи одним отдельнымbool; в этом случае результат вычисляется путём применения логического исключающего ИЛИ с отдельным элементом к каждому элементу большего тензора. - Двумя объектами
tf.Tensorтипаboolодинаковой формы. В этом случае результатом будет поэлементное логическое исключающее ИЛИ двух входных тензоров.
Использование:
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 | tf.Tensor типа bool. |
y | tf.Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
tf.Tensor типа bool, размер которого совпадает с размером x или y. |
__sub__
__sub__(
y, name=None
)
Возвращает поэлементную разность x - y.
Примечание: tf.subtract поддерживает трансляцию. Подробнее о трансляции — здесь
Диапазон значений как входных, так и выходных данных — (-inf, inf).
Примеры использования приведены ниже.
Операция вычитания массива и скалярного значения:
x = [1, 2, 3, 4, 5] y = 1 tf.subtract(x, y) <tf.Tensor: shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4], dtype=int32)> tf.subtract(y, x) <tf.Tensor: shape=(5,), dtype=int32, numpy=array([ 0, -1, -2, -3, -4], dtype=int32)>
Обратите внимание, что вместо этого можно использовать бинарный оператор -:
x = tf.convert_to_tensor([1, 2, 3, 4, 5]) y = tf.convert_to_tensor(1) x - y <tf.Tensor: shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4], dtype=int32)>
Операция вычитания массива и тензора той же формы:
x = [1, 2, 3, 4, 5] y = tf.constant([5, 4, 3, 2, 1]) tf.subtract(y, x) <tf.Tensor: shape=(5,), dtype=int32, numpy=array([ 4, 2, 0, -2, -4], dtype=int32)>
Например:
x = tf.constant([1, 2], dtype=tf.int8) y = [2**8 + 1, 2**8 + 2] tf.subtract(x, y) <tf.Tensor: shape=(2,), dtype=int8, numpy=array([0, 0], dtype=int8)>
При вычитании двух входных значений разной формы функция tf.subtract следует общим правилам трансляции . Формы двух входных массивов сравниваются поэлементно. Начиная с последних измерений, соответствующие измерения должны быть равны или одно из них должно быть равно 1.
Например:
x = np.ones(6).reshape(2, 3, 1)
y = np.ones(6).reshape(2, 1, 3)
tf.subtract(x, y)
<tf.Tensor: shape=(2, 3, 3), dtype=float64, numpy=
array([[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]])>Пример с входными данными разной размерности:
x = np.ones(6).reshape(2, 3, 1)
y = np.ones(6).reshape(1, 6)
tf.subtract(x, y)
<tf.Tensor: shape=(2, 3, 6), dtype=float64, numpy=
array([[[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]]])>| Аргументы | |
|---|---|
x | Tensor. Должен иметь один из следующих типов: bfloat16, half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128, uint32, uint64. |
y | Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
Tensor. Имеет тот же тип, что и x. |
__truediv__
__truediv__(
y, name=None
)
Поэлементно делит 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__(
y, name='LogicalXor'
)
Функция логического исключающего ИЛИ.
x ^ y = (x | y) & ~(x & y)
Требуется, чтобы x и y имели одинаковую форму или формы, совместимые с трансляцией. Например, x и y могут быть:
- двумя отдельными элементами типа
bool - одним
tf.Tensorтипаboolи одним отдельным значениемbool; в этом случае логическое исключающее ИЛИ с отдельным элементом вычисляется для каждого элемента большего тензора. - двумя объектами
tf.Tensorтипаboolодинаковой формы. В этом случае результатом будет поэлементное логическое исключающее ИЛИ двух входных тензоров.
Использование:
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 | tf.Tensor типа bool. |
y | tf.Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
tf.Tensor типа bool, имеющий тот же размер, что и x или 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/RaggedTensor