Spec-Zone.ru › TensorFlow

tf.RaggedTensor

Представляет разреженный тензор.

Просмотреть псевдонимы

Совместимые псевдонимы для миграции

Подробнее см. в руководстве по миграции.

tf.compat.v1.RaggedTensor

Используется в блокнотах

Используется в руководстве
  • Разреженные тензоры
  • Строки Unicode

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_lengths
  • tf.RaggedTensor.from_value_rowids
  • tf.RaggedTensor.from_row_splits
  • tf.RaggedTensor.from_row_starts
  • tf.RaggedTensor.from_row_limits
  • tf.RaggedTensor.from_nested_row_splits
  • tf.RaggedTensor.from_nested_row_lengths
  • tf.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.values — это Tensor, то rt.flat_values — это rt.values; в противном случае rt.flat_values — это rt.values.flat_values.

Концептуально flat_values — это тензор, полученный путём преобразования самого внешнего измерения и всех разреженных измерений в одно измерение.

rt.flat_values.shape = [nvals] + rt.shape[rt.ragged_rank + 1:] (где nvals — число элементов в преобразованных измерениях).

Пример:

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 для всех разреженных измерений.

rt.nested_row_splits — это кортеж, содержащий тензоры row_splits для всех разреженных измерений в rt, упорядоченные от самого внешнего к самому внутреннему. В частности, rt.nested_row_splits = (rt.row_splits,) + value_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.row_splits задаёт, где начинаются и заканчиваются значения каждой строки в rt.values. В частности, значения строки rt[i] хранятся в срезе rt.values[rt.row_splits[i]:rt.row_splits[i+1]].

Пример:

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.values — это потенциально разреженный тензор, полученный путём преобразования двух самых внешних измерений rt в одно измерение.

rt.values.shape = [nvals] + rt.shape[2:] (где nvals — число элементов во внешних двух измерениях rt).

rt.ragged_rank = self.ragged_rank - 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)

Методы

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)]

result.rank = values.rank + 1. result.ragged_rank = values.ragged_rank + 1.

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 или y) является тензором, а другой — нет, тип данных нетензорного аргумента будет приведен к типу данных тензора. Это может привести к нежелательному переполнению или потере точности при преобразовании.

Например:

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). (Устарело)

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

Эта функция делит 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 может иметь один из следующих типов:
  • int-константа
  • Целочисленный скаляр Tensor
  • slice, содержащий целочисленные константы и/или целочисленные скалярные Tensors

  • Ellipsis

  • tf.newaxis

  • tuple, содержащий любой из перечисленных выше типов (для многомерной индексации)

Возвращает
Объект 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.

Вызывает исключение
  • InvalidArgumentError: если формы или типы x и y несовместимы.

__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.

Если x — это SparseTensor, возвращает SparseTensor(x.indices, tf.math.negative(x.values, ...), x.dense_shape)

__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 или y) является тензором, а другой — нет, нетензорный входной аргумент примет (или будет преобразован к) тип данных тензорного входного аргумента. Это может привести к нежелательному переполнению или потере точности при преобразовании.

Например,

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). (устарело)

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

Эта функция делит 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.

Исключения
  • InvalidArgumentError: если x и y имеют несовместимые формы или типы.

__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 или y) является тензором, а другой — нет, нетензорный входной аргумент примет (или будет преобразован к) тип данных тензорного входного аргумента. Это может привести к нежелательному переполнению или потере точности при преобразовании.

Например,

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 или y) является тензором, а другой — нет, тип данных нетензорного аргумента будет приведен к типу данных тензорного аргумента. Это может привести к нежелательному переполнению или потере точности при преобразовании.

Например:

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

Spec-Zone.ru

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