tf.RaggedTensor
Представляет разрывистый тензор.
Используется в блокнотах
| Используется в руководстве |
|---|
A 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 содержит только один неравномерный размер (самый внутренний размер). В отличие от этого, если from_row_splits используется для построения аналогичного RaggedTensor, то этот 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 | Значения в этом тензоре. |
flat_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 | Количество раз, когда плоские значения 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 | Индексы row-split для неравномерного тензора.
Пример: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 | Тип данных для возвращаемого тензора. По умолчанию self.row_splits.dtype. |
| Возвращаемое значение | |
|---|---|
Целочисленный тензор (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
)
Преобразует двумерный 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 для возвращаемого RaggedTensor's тензора row_splits. Одно из 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 | Необязательный набор длин строк, заданный с помощью 1-мерного целочисленного Tensor, длина которого равна tensor.shape[0] (количество строк в tensor). Если указано, то output[row] будет содержать tensor[row][:lengths[row]]. Отрицательные длины рассматриваются как нулевые. Вы можете необязательно передать список или кортеж длин в этот аргумент, который будет использован в качестве вложенных длин строк для построения разряженного тензора с несколькими разряженными измерениями. |
padding | Необязательное значение заполнения. Если указано, то любой суффикс строки, состоящий полностью из padding, будет исключен из возвращаемого RaggedTensor. padding — это Tensor с тем же типом данных, что и tensor, и со значением shape=tensor.shape[ragged_rank + 1:]. |
ragged_rank | Целое число, определяющее разряженный ранг возвращаемого RaggedTensor. Должно быть больше нуля. |
name | Префикс имени для возвращаемых тензоров (необязательно). |
row_splits_dtype | Тип dtype для возвращаемого RaggedTensor тензора row_splits. Один из tf.int32 или tf.int64. |
| Возвращаемое значение | |
|---|---|
RaggedTensor со специфицированным ragged_rank. Форма возвращаемого разряженного тензора совместима с формой 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 содержит только одно разряженное измерение (внутреннее измерение). В отличие от этого, если from_row_splits используется для создания аналогичного RaggedTensor, то этот 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 | 1-мерный целочисленный тензор с формой [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
Статически известная форма этого разряженного тензора.
| Возвращаемое значение | |
|---|---|
TensorShape, содержащая статически известную форму этого разряженного тензора. Разряженные измерения имеют размер 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
)
Объединяет внешние измерения...внутренние измерения в одно измерение.
Возвращает копию этого 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
)
Возвращает кортеж, содержащий row_lengths для всех разряженных измерений.
rt.nested_row_lengths() — это кортеж, содержащий row_lengths тензоры для всех разряженных измерений в rt, от внешнего к внутреннему.
| Аргументы | |
|---|---|
name | Префикс имени для возвращаемых тензоров (необязательно). |
| Возвращаемое значение | |
|---|---|
Кортеж 1-мерных целочисленных Tensors. Длина кортежа равна self.ragged_rank. |
nested_value_rowids
nested_value_rowids(
name=None
)
Возвращает кортеж, содержащий значение value_rowids для всех разреженных измерений.
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 | Префикс имени для возвращаемых тензоров (необязательно). |
| Возвращаемое значение | |
|---|---|
Кортеж из 1-мерных целочисленных тензоров 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
)
Возвращает количество строк в этом разреженном тензоре.
То есть размер внешнего измерения тензора.
| Аргументы | |
|---|---|
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 со значениями для этого разреженного тензора.
Требуется, чтобы этот разреженный тензор был создан в режиме выполнения eager.
Разреженные измерения кодируются с помощью массивов 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
)
Возвращает длины строк в этом разреженном тензоре.
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
)
Возвращает предельные индексы для строк в этом разреженном тензоре.
Эти индексы указывают, где заканчиваются значения для каждой строки в self.values. rt.row_limits(self) равно rt.row_splits[:-1].
| Аргументы | |
|---|---|
name | Префикс имени для возвращаемого тензора (необязательно). |
| Возвращаемое значение | |
|---|---|
Целочисленный тензор 1-й размерности с формой [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
)
Возвращает начальные индексы для строк в этом разреженном тензоре.
Эти индексы указывают, где начинаются значения для каждой строки в self.values. rt.row_starts() равно rt.row_splits[:-1].
| Аргументы | |
|---|---|
name | Префикс имени для возвращаемого тензора (необязательно). |
| Возвращаемое значение | |
|---|---|
Целочисленный тензор 1-й размерности с формой [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 список со значениями для этого разреженного тензора.
Требуется, чтобы этот разреженный тензор был создан в режиме выполнения eager.
| Возвращаемое значение | |
|---|---|
| Вложенный Python список. |
to_sparse
to_sparse(
name=None
)
Преобразует этот разреженный тензор в 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
)
Преобразует этот разреженный тензор в 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 в этом разряженном тензоре.
rt.value_rowids() соответствует внешнему размеру rt.values и указывает строку, содержащую каждое значение. В частности, строка rt[row] состоит из значений rt.values[j], где rt.value_rowids()[j] == row.
| Аргументы | |
|---|---|
name | Префикс имени для возвращаемого тензора (необязательно). |
| Возвращаемое значение | |
|---|---|
1-мерный целочисленный 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. |
| Возвращаемое значение | |
|---|---|
Разряженный тензор. 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
)
Возвращает копию этого разряженного тензора с указанным row_splits типом данных.
Для разряженных тензоров с несколькими разряженными измерениями row_splits для всех вложенных RaggedTensor объектов преобразуются к указанному типу данных.
| Аргументы | |
|---|---|
dtype | Тип данных для row_splits. Один из tf.int32 или tf.int64. |
| Возвращаемое значение | |
|---|---|
Копия этого разряженного тензора, с 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. |
| Возвращаемое значение | |
|---|---|
Разряженный тензор. result.rank = 1 + new_values.rank. result.ragged_rank = 1 + new_values.ragged_rank |
__abs__
__abs__(
name=None
)
Вычисляет абсолютное значение разряженного тензора.
Для разряженного тензора целых или вещественных значений эта операция возвращает разряженный тензор того же типа, где каждый элемент содержит абсолютное значение соответствующего элемента на входе.
Для разряженного тензора 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 | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Разряженный тензор того же размера и типа, что и 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 | Имя операции (необязательно). |
| Возвращает | |
|---|---|
A tf.RaggedTensor типа tf.bool с формой, к которой x и y транслируются. |
__bool__
__bool__()
Вызывает TypeError, когда RaggedTensor используется как Python bool.
Чтобы предотвратить использование RaggedTensor в качестве bool, эта функция всегда вызывает 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 | Правая часть оператора >=. |
| Возвращает | |
|---|---|
A 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 | A Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A 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 | A Tensor типа bool. A Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A 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 | A Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A 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 | A Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A 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 | A Tensor. Должен быть одного из следующих типов: int8, int16, int32, int64, uint8, uint16, uint32, uint64, bfloat16, half, float32, float64. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A 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 | A Tensor. Должен быть одного из следующих типов: bfloat16, half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение |
|---|
A 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 | A Tensor. Должен быть одного из следующих типов: bfloat16, half, float32, float64, int8, int16, int32, int64, complex64, complex128. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor. Имеет тот же тип, что и x. Если |
__nonzero__
__nonzero__()
Вызывает TypeError, когда RaggedTensor используется как Python bool.
Чтобы предотвратить использование RaggedTensor в качестве bool, эта функция всегда вызывает 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 | A tf.Tensor типа bool. |
y | A tf.Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A tf.Tensor типа bool с формой, к которой x и y транслируются. |
| Аргументы | |
|---|---|
x | A Tensor типа bool. |
y | A Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A 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 | A Tensor типа float16, float32, float64, int32, int64, complex64 или complex128. |
y | A Tensor типа float16, float32, float64, int32, int64, complex64 или complex128. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor. |
__radd__
__radd__(
y, 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 | A tf.Tensor. Должен быть одного из следующих типов: bfloat16, half, float16, float32, float64, uint8, uint16, uint32, uint64, int8, int16, int32, int64, complex64, complex128, string. |
y | A tf.Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно) |
__rand__
__rand__(
y, name=None
)
Возвращает логическое значение поэлементного x & y.
Логическая функция И.
Требуется, чтобы x и y имели одинаковую форму или имели совместимые для трансляции формы. Например, y может быть:
- Один Python boolean, где результат вычисляется путём применения логического И с отдельным элементом к каждому элементу в
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 | A Tensor. Должен быть одного из следующих типов: int8, int16, int32, int64, uint8, uint16, uint32, uint64, bfloat16, half, float32, float64. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A 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 | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение |
|---|
A Tensor. Имеет тот же тип, что и x.
| Исключения | |
|---|---|
|
__ror__
__ror__(
y: Annotated[Any, tf.raw_ops.Any],
name=None
) -> Annotated[Any, tf.raw_ops.Any]
Возвращает логическое значение x OR y по элементам.
Логическая функция OR.
Требуется, чтобы x и y имели одинаковую форму или имели совместимые формы векторизации. Например, x и y могут быть:
- Два отдельных элемента типа
bool. - Один
tf.Tensorтипаboolи один отдельныйbool, где результат вычисляется путём применения логического OR с отдельным элементом к каждому элементу в большем тензоре. - Два объекта
tf.Tensorтипаboolодинаковой формы. В этом случае результат будет элементно-логическим OR двух входных тензоров.
Вы также можете использовать оператор |.
| Использование | |
|---|---|
>>> 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 | Значение типа bool. |
y | Значение типа bool. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Значение типа 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 | Значение типа float16, float32, float64, int32, int64, complex64 или complex128. |
y | Значение типа 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 | Значение. Должно быть одного из следующих типов: bfloat16, half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128, uint32, uint64. |
y | Значение. Должно иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Значение. Имеет тот же тип, что и x. |
__rtruediv__
__rtruediv__(
y, name=None
)
Делит x / y поэлементно (используя семантику оператора деления Python 3).
Примечание: Предпочтительнее использовать оператор тензора или tf.divide, которые следуют семантике оператора деления Python.
Эта функция принуждает к семантике оператора деления Python 3, где все целочисленные аргументы сначала преобразуются к плавающим типам. Этот op генерируется обычным оператором деления 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 | Численный числитель. |
y | Численный знаменатель. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
x / y, вычисленная в формате с плавающей точкой. |
| Исключения | |
|---|---|
TypeError | Если x и y имеют разные типы данных. |
__rxor__
__rxor__(
y, name='LogicalXor'
)
Логическая функция XOR.
x ^ y = (x | y) & ~(x & y)
Требуется, чтобы x и y имели одинаковую форму или имели совместимые с вещанием формы. Например, x и y могут быть:
- Два одиночных элемента типа
bool - Один
tf.Tensorтипаboolи один одиночныйbool, где результат будет вычислен путём применения логического XOR с одиночным элементом к каждому элементу в большем тензоре. - Два объекта
tf.Tensorтипаboolодинаковой формы. В этом случае результат будет поэлементным логическим XOR двух входных тензоров.
Использование:
a = tf.constant([True]) b = tf.constant([False]) tf.math.logical_xor(a, b) <tf.Tensor: shape=(1,), dtype=bool, numpy=array([ True])>
c = tf.constant([True]) x = tf.constant([False, True, True, False]) tf.math.logical_xor(c, x) <tf.Tensor: shape=(4,), dtype=bool, numpy=array([ True, False, False, True])>
y = tf.constant([False, False, True, True]) z = tf.constant([False, True, False, True]) tf.math.logical_xor(y, z) <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, True, True, False])>
| Аргументы | |
|---|---|
x | 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 | A Tensor. Должен быть одного из следующих типов: bfloat16, half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128, uint32, uint64. |
y | A Tensor. Должен иметь тот же тип, что и x. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
A Tensor. Имеет тот же тип, что и x. |
__truediv__
__truediv__(
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 разные типы данных. |
__xor__
__xor__(
y, name='LogicalXor'
)
Функция логического XOR.
x ^ y = (x | y) & ~(x & y)
Требуется, чтобы у x и y одинаковая форма или формы были совместимы с трансляцией. Например, x и y могут быть:
- Два отдельных элемента типа
bool - Один
tf.Tensorтипаboolи одно отдельноеbool, где результат будет вычислен путём применения логического XOR к отдельному элементу к каждому элементу в большем тензоре. - Два объекта
tf.Tensorтипаboolодинаковой формы. В этом случае результатом будет поэлементное логическое XOR двух входных тензоров.
Использование:
a = tf.constant([True]) b = tf.constant([False]) tf.math.logical_xor(a, b) <tf.Tensor: shape=(1,), dtype=bool, numpy=array([ True])>
c = tf.constant([True]) x = tf.constant([False, True, True, False]) tf.math.logical_xor(c, x) <tf.Tensor: shape=(4,), dtype=bool, numpy=array([ True, False, False, True])>
y = tf.constant([False, False, True, True]) z = tf.constant([False, True, False, True]) tf.math.logical_xor(y, z) <tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, True, True, False])>
| Аргументы | |
|---|---|
x | A tf.Tensor типа bool. |
y | A tf.Tensor типа bool. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
A 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