Spec-Zone.ru › TensorFlow 2.9

tf.RaggedTensor

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

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

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

Псевдонимы для миграции

См. Руководство по миграции для получения более подробной информации.

tf.compat.v1.RaggedTensor

Разряженный тензор — это тензор с одной или несколькими разряженными размерностями, которые представляют собой размерности, у которых срезы могут иметь разную длину. Например, внутренняя (столбцовая) размерность тензора rt=[[3, 1, 4, 1], [], [5, 9, 2], [6], []] является разряженной, поскольку столбцовые срезы (rt[0, :], ..., rt[4, :]) имеют разную длину. Размерности, у которых все срезы имеют одинаковую длину, называются равномерными размерностями. Наружная размерность разряженного тензора всегда является равномерной, поскольку она состоит из одного среза (и, следовательно, нет возможности для разной длины срезов).

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

Возможно разряженные тензоры

Многие операции поддерживают как разряженные тензоры, так и обычные тензоры (см. tf.ragged для полного списка). Термин «возможно разряженный тензор» может использоваться для обозначения тензора, который может быть либо разряженным тензором, либо обычным тензором. Ранг разряженности обычного тензора равен нулю.

Документирование форм RaggedTensor

При документировании формы разряженного тензора разряженные размерности можно указать, заключив их в скобки. Например, форма 3-мерного разряженного тензора, хранящего вложение слов фиксированного размера для каждого слова в предложении, для каждого предложения в пачке, может быть записана как [num_sentences, (num_words), embedding_size]. Скобки вокруг (num_words) указывают, что эта размерность является разряженной, и что длина каждого списка элементов в этой размерности может изменяться для каждого элемента.

Компоненты тензоров

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

  • Тензора 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 для тензора 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 может использоваться для создания разряженного тензора с несколькими разряженными размерностями непосредственно, путем предоставления списка тензоров 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], []]]

Равномерные внутренние размерности

Разряженные тензоры с равномерными внутренними размерностями можно определить, используя многомерный тензор 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 с тензором разбиения строк uniform_row_length. Например, разряженный тензор с формой [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)

Равномерные и разряженные внешние размерности могут быть чередующимися, что означает, что может быть создан тензор с любой комбинацией разряженных и равномерных размерностей. Например, разряженный тензор 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.values является разряженным тензором, то 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 Количество раз, когда плоские значения разряженного тензора разбиваются.
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)

Строки разряженного тензора считаются равномерными (т. е. не разряженными) только в том случае, если статически (на этапе создания графа) можно определить, что все строки имеют одинаковую длину.

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
)

Возвращает форму границ для этого разряженного тензора.

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

Каждая строка 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 Тип данных для возвращаемого 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 Тип данных для возвращаемого RaggedTensor's 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)]

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 Целочисленный тензор 1-D с формой [nvals], который однозначно соответствует values, и определяет индекс строки каждого значения. Должен быть неотрицательным и отсортирован по возрастанию.
nrows Целочисленное скалярное значение, определяющее количество строк. Это значение должно быть указано, если RaggedTensor может содержать пустые строки обучения. Должно быть больше value_rowids[-1] (или нуля, если value_rowids пусто). По умолчанию value_rowids[-1] + 1 (или ноль, если value_rowids пусто).
name Префикс имени для RaggedTensor (необязательно).
validate Если true, то использовать проверки для проверки, что аргументы образуют допустимый RaggedTensor. Примечание: эти проверки занимают время выполнения, поскольку они должны проверяться для каждого значения тензора.
Возвращаемое значение
A 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()

Статически известная форма этого разрозненного тензора.

Возвращаемое значение
A 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
)

Возвращает кортеж, содержащий длины строк для всех разрозненных измерений.

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 array со значениями для этого RaggedTensor.

Требует, чтобы этот RaggedTensor был создан в режиме выполнения 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]])
Возвращаемое значение
A 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-D с формой [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-D с формой [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 выполнения.

Возвращает
Вложенный 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 в этом разряженном тензоре.

rt.value_rowids() соответствует один-к-одному внешнему измерению rt.values, и указывает строку, содержащую каждое значение. В частности, строка rt[row] состоит из значений rt.values[j], где rt.value_rowids()[j] == row.

Аргументы
name Префикс имени для возвращаемого тензора (необязательно).
Возвращает
Целочисленный тензор 1-D 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
)

Возвращает копию этого разряженного тензора с указанным типом 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.
Возвращает
RaggedTensor. 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.constant([-2.25, 3.25])
tf.abs(x)
<tf.Tensor: shape=(2,), dtype=float32,
numpy=array([2.25, 3.25], dtype=float32)>
# complex number
x = tf.constant([[-2.25 + 4.75j], [-3.25 + 5.75j]])
tf.abs(x)
<tf.Tensor: shape=(2, 1), dtype=float64, numpy=
array([[5.25594901],
       [6.60492241]])>
Аргументы
x Tensor или SparseTensor типа float16, float32, float64, int32, int64, complex64 или complex128.
name Имя операции (необязательно).
Возвращает
Матрицу или тензор того же размера, типа и разреженности, что и x, содержащие абсолютные значения. Обратите внимание, что для complex64 или complex128 входных данных возвращаемый Tensor будет иметь тип float32 или float64 соответственно.

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

__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 Тензор. Должен быть одного из следующих типов: bfloat16, half, float32, float64, uint8, int8, int16, int32, int64, complex64, complex128, string.
y Тензор. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).

__and__

__and__(
    y, name=None
)

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

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

Требуется, чтобы x и y имели одинаковую форму или имели совместимые для векторизации формы. Например, x и y могут быть:

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

Также можно использовать оператор &.

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

a = tf.constant([True])
b = tf.constant([False])
tf.math.logical_and(a, b)
<tf.Tensor: shape=(1,), dtype=bool, numpy=array([False])>
a & b
<tf.Tensor: shape=(1,), dtype=bool, numpy=array([False])>
c = tf.constant([True])
x = tf.constant([False, True, True, False])
tf.math.logical_and(c, x)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False,  True,  True, False])>
c & x
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False,  True,  True, False])>
y = tf.constant([False, False, True, True])
z = tf.constant([False, True, False, True])
tf.math.logical_and(y, z)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, False, False, True])>
y & z
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, False, False, True])>

Данная операция также поддерживает векторизацию.

tf.logical_and([[True, False]], [[True], [False]])
<tf.Tensor: shape=(2, 2), dtype=bool, numpy=
  array([[ True, False],
         [False, False]])>

Версия этой поэлементной операции с сокращением — tf.math.reduce_all.

Аргументы
x Тензор типа bool.
y Тензор типа bool.
name Имя операции (необязательно).
Возвращает
Тензор типа bool с формой, к которой векторизуются x и y.
Аргументы
x Тензор типа bool.
y Тензор типа bool.
name Имя операции (необязательно).
Возвращает
Тензор типа bool.

__bool__

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

__bool__()

Метод-заглушка, чтобы предотвратить использование RaggedTensor в качестве Python bool.

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

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

Сравнивает два тензора поэлементно на равенство, если они совместимы для векторизации; или возвращает False, если они не совместимы для векторизации. (Обратите внимание, что это поведение отличается от tf.math.equal, который поднимает исключение, если два тензора не совместимы для векторизации.)

Цель в API:

Этот метод представлен в API TensorFlow, чтобы разработчики библиотек могли зарегистрировать диспетчеризацию для Tensor.eq, чтобы позволить ему обрабатывать пользовательские составные тензоры и другие пользовательские объекты.

Символ API не предназначен для прямого вызова пользователями и появляется в документации, генерируемой TensorFlow.

Аргументы
self Левая часть оператора == .
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__(
    y, name=None
)

Возвращает логическое значение (x >= y) поэлементно.

Примечание: math.greater_equal поддерживает вещание. Подробнее о вещании здесь

Пример:

x = tf.constant([5, 4, 6, 7])
y = tf.constant([5, 2, 5, 10])
tf.math.greater_equal(x, y) ==> [True, True, True, False]

x = tf.constant([5, 4, 6, 7])
y = tf.constant([5])
tf.math.greater_equal(x, y) ==> [True, False, True, True]
Аргументы
x A Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y A Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращаемое значение
A Tensor типа bool.

__getitem__

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

__getitem__(
    key
)

Возвращает указанную часть этого RaggedTensor.

Поддерживает многомерную индексацию и срезы, с одним ограничением: индексация в разряженное внутреннее измерение запрещена. Этот случай проблематичен, потому что указанное значение может существовать в некоторых строках, но не в других. В таких случаях неясно, следует ли (1) сообщить об ошибке IndexError; (2) использовать значение по умолчанию; или (3) пропустить это значение и вернуть тензор с меньшим количеством строк, чем изначально. Следуя руководящим принципам Python («В случае неоднозначности откажитесь от соблазна угадывать»), мы просто запрещаем эту операцию.

Аргументы
rt_input Разреженный тензор для среза.
key Указывает, какую часть RaggedTensor вернуть, используя стандартную семантику Python (например, отрицательные значения индексируют с конца). key может иметь любой из следующих типов:
  • int константа
  • Скалярное целое число Tensor
  • slice содержащий целочисленные константы и/или скалярные целые Tensor

  • Ellipsis

  • tf.newaxis

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

Возвращаемое значение
A Tensor или RaggedTensor объект. Значения, включающие по крайней мере одно разреженное измерение, возвращаются как RaggedTensor. Значения, не включающие разряженных измерений, возвращаются как Tensor. См. выше примеры выражений, которые возвращают Tensor vs RaggedTensors.
Исключения
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, name=None
)

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

Примечание: math.greater поддерживает вещание. Подробнее о вещании здесь

Пример:

x = tf.constant([5, 4, 6])
y = tf.constant([5, 2, 5])
tf.math.greater(x, y) ==> [False, True, True]

x = tf.constant([5, 4, 6])
y = tf.constant([5])
tf.math.greater(x, y) ==> [False, False, True]
Аргументы
x A Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y A Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращаемое значение
A Tensor типа bool.

__invert__

__invert__(
    name=None
)

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

Пример:

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

__le__

__le__(
    y, name=None
)

Возвращает логическое значение (x <= y) поэлементно.

Примечание: math.less_equal поддерживает вещание. Подробнее о вещании здесь

Пример:

x = tf.constant([5, 4, 6])
y = tf.constant([5])
tf.math.less_equal(x, y) ==> [True, True, False]

x = tf.constant([5, 4, 6])
y = tf.constant([5, 6, 6])
tf.math.less_equal(x, y) ==> [True, True, True]
Аргументы
x A Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y A Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращаемое значение
A Tensor типа bool.

__lt__

__lt__(
    y, name=None
)

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

Примечание: math.less поддерживает вещание. Подробнее о вещании здесь

Пример:

x = tf.constant([5, 4, 6])
y = tf.constant([5])
tf.math.less(x, y) ==> [False, True, False]

x = tf.constant([5, 4, 6])
y = tf.constant([5, 6, 7])
tf.math.less(x, y) ==> [False, True, True]
Аргументы
x A Tensor. Должен быть одного из следующих типов: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
y A Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращаемое значение
A Tensor типа bool.

__mod__

__mod__(
    y, name=None
)

Возвращает остаток от деления поэлементно. Когда x < 0 xor y < 0 равно

истинному, это соответствует семантике Python, так как результат здесь согласован с делением с округлением вниз. Например, floor(x / y) * y + mod(x, y) = x.

Примечание: 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 Тензор. Должен быть одного из следующих типов: 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
)

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

Т.е., \(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__()

Метод-заглушка для предотвращения использования RaggedTensor как Python-булевого значения.

__or__

__or__(
    y, name=None
)

Возвращает истинность 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])>
tf.logical_or([[True, False]], [[True], [False]])
<tf.Tensor: shape=(2, 2), dtype=bool, numpy=
array([[ True,  True],
     [ True, False]])>

Эта операция также поддерживает трансляцию.

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 A tf.Tensor. Must be one of the following types: bfloat16, half, float32, float64, uint8, int8, int16, int32, int64, complex64, complex128, string.
y A tf.Tensor. Must have the same type as x.
name Имя операции (необязательно)

__rand__

__rand__(
    y, name=None
)

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

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

Требуется, чтобы x и y имели одинаковую форму или имели совместимые для трансляции формы. Например, x и y могут быть:

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

Вы также можете использовать оператор & вместо него.

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

a = tf.constant([True])
b = tf.constant([False])
tf.math.logical_and(a, b)
<tf.Tensor: shape=(1,), dtype=bool, numpy=array([False])>
a & b
<tf.Tensor: shape=(1,), dtype=bool, numpy=array([False])>
c = tf.constant([True])
x = tf.constant([False, True, True, False])
tf.math.logical_and(c, x)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False,  True,  True, False])>
c & x
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False,  True,  True, False])>
y = tf.constant([False, False, True, True])
z = tf.constant([False, True, False, True])
tf.math.logical_and(y, z)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, False, False, True])>
y & z
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([False, False, False, True])>

Эта операция также поддерживает трансляцию.

tf.logical_and([[True, False]], [[True], [False]])
<tf.Tensor: shape=(2, 2), dtype=bool, numpy=
  array([[ True, False],
         [False, False]])>

Функция сокращения этой поэлементной операции — tf.math.reduce_all.

Аргументы
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.

__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, name=None
)

Возвращает остаток от деления поэлементно. Когда x < 0 xor y < 0 равно

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

Примечание: 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 A Tensor. Must be one of the following types: bfloat16, half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128.
y A Tensor. Должен иметь тот же тип, что и x.
name Имя операции (необязательно).
Возвращаемое значение

A Tensor. Имеет тот же тип, что и x.

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

__ror__

__ror__(
    y, name=None
)

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

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

Требуется, чтобы 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'
)

Логическая операция 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 или 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 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 Тип 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/versions/r2.9/api_docs/python/tf/RaggedTensor

Spec-Zone.ru

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