Spec-Zone.ru › TensorFlow 2.9

tf.experimental.RowPartition

Разбиение последовательности значений на смежные подпоследовательности («строки»).

Псевдонимы

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

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

tf.compat.v1.experimental.RowPartition

tf.experimental.RowPartition(
    row_splits,
    row_lengths=None,
    value_rowids=None,
    nrows=None,
    uniform_row_length=None,
    nvals=None,
    internal=False
)

Объект RowPartition описывает, как последовательность из nvals элементов должна быть разделена на nrows смежных подпоследовательностей («строк»). Например, RowPartition можно использовать для разбиения вектора [1, 2, 3, 4, 5] на подпоследовательности [[1, 2], [3], [], [4, 5]]. Обратите внимание, что RowPartition хранит информацию о том, как значения разделены, но не включает сами раздёленные значения. tf.RaggedTensor используется для объединения тензора values с одним или несколькими RowPartitions, обеспечивая полное кодирование разряженного тензора (т. е. тензора с переменной длиной измерений).

RowPartition можно определить с помощью нескольких различных схем:

  • row_lengths: целочисленный вектор формы [nrows], который определяет длину каждой строки.

  • row_splits: целочисленный вектор формы [nrows+1], определяющий «точки разделения» между каждой строкой.

  • row_starts: целочисленный вектор формы [nrows], который определяет начальный смещение для каждой строки. Эквивалентно row_splits[:-1].

  • row_limits: целочисленный вектор формы [nrows], который определяет конечный смещение для каждой строки. Эквивалентно row_splits[1:].

  • value_rowids — это целочисленный вектор формы [nvals], соответствующий попарно значениям последовательности, который указывает строку, к которой принадлежит каждое значение. Если разбиение имеет пустые хвостовые строки, то также должен быть указан nrows.

  • uniform_row_length — это целочисленная скалярная величина, определяющая длину каждой строки. Эта схема может быть использована только в том случае, если все строки имеют одинаковую длину.

Например, следующие RowPartitions все представляют разбиение 8 значений на 5 подсписков следующим образом: [[*, *, *, *], [], [*, *, *], [*], []].

p1 = RowPartition.from_row_lengths([4, 0, 3, 1, 0])
p2 = RowPartition.from_row_splits([0, 4, 4, 7, 8, 8])
p3 = RowPartition.from_row_starts([0, 4, 4, 7, 8], nvals=8)
p4 = RowPartition.from_row_limits([4, 4, 7, 8, 8])
p5 = RowPartition.from_value_rowids([0, 0, 0, 0, 2, 2, 2, 3], nrows=5)

Дополнительную информацию о каждой схеме см. в документации к соответствующему методу-фабрикату. Дополнительные примеры см. в документации по tf.RaggedTensor.

Предвычисленные кодирования

RowPartition всегда хранит как минимум одно кодирование разбиения, но его также можно настроить на кэширование дополнительных кодирований. Это позволяет избежать ненужных вычислений в режиме eager. (В режиме графа оптимизации, такие как устранение общих подвыражений, обычно препятствуют этим ненужным вычислениям.) Чтобы проверить, какие кодирования были предвычислены, используйте RowPartition.has_precomputed_<encoding>. Чтобы кэшировать дополнительное кодирование, используйте RowPartition.with_precomputed_<encoding>.

Аргументы
row_splits Целочисленный тензор 1-D с формой [nrows+1].
row_lengths Целочисленный тензор 1-D с формой [nrows]
value_rowids Целочисленный тензор 1-D с формой [nvals].
nrows Целочисленный скалярный тензор.
uniform_row_length Скалярный тензор.
nvals Скалярный тензор.
internal Значение закрытого ключа, необходимое для обеспечения того, что этот закрытый конструктор вызывается только из методов-фабрикатов.
Исключения
TypeError Если тензор разбиения строк имеет неподходящий тип данных.
TypeError Если ровно один аргумент разбиения строк не был указан.
ValueError Если тензор разбиения строк имеет неподходящую форму.
ValueError Если указаны несколько аргументов разбиения.
ValueError Если nrows указан, но value_rowids не равен None.
Атрибуты
dtype Тип DType, используемый для кодирования разбиения строк (либо int32, либо int64).
static_nrows Количество строк в этом разбиении, если известно статически.
self.row_lengths().shape == [self.static_nrows]
self.row_starts().shape == [self.static_nrows]
self.row_limits().shape == [self.static_nrows]
self.row_splits().shape == [self.static_nrows + 1]
static_nvals Количество значений в этом разбиении, если известно статически.
self.value_rowids().shape == [self.static_vals]
static_uniform_row_length Количество значений в каждой строке этого разбиения, если известно статически.

Методы

from_row_lengths

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

@classmethod
from_row_lengths(
    row_lengths, validate=True, dtype=None, dtype_hint=None
)

Создает RowPartition, разбивая строки по row_lengths.

Этот RowPartition разбивает последовательность values на строки, указывая длину каждой строки:

partitioned_rows = [[values.pop(0) for _ in range(length)]
                    for length in row_lengths]
Аргументы
row_lengths Целочисленный тензор 1-D с формой [nrows]. Должен быть неотрицательным.
validate Если True, то используются утверждения для проверки того, что аргументы образуют корректное RowPartition.
dtype Необязательный тип данных для RowPartition. Если отсутствует, тип определяется по типу row_lengths, dtype_hint или tf.int64.
dtype_hint Необязательный тип данных для RowPartition, используемый, когда dtype равно None. В некоторых случаях у вызывающей стороны может не быть типа данных в виду при преобразовании в тензор, поэтому dtype_hint может использоваться в качестве мягкой предпочтительной настройки. Если преобразование в dtype_hint невозможно, этот аргумент не имеет эффекта.
Возвращаемое значение
Объект RowPartition.

from_row_limits

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

@classmethod
from_row_limits(
    row_limits, validate=True, dtype=None, dtype_hint=None
)

Создает RowPartition, разбивая строки по row_limits.

Эквивалентно: from_row_splits(values, concat([0, row_limits], axis=0)).

Аргументы
row_limits Целочисленный тензор 1-D с формой [nrows]. Должен быть отсортирован по возрастанию.
validate Если True, то используются утверждения для проверки того, что аргументы образуют корректное RowPartition.
dtype Необязательный тип данных для RowPartition. Если отсутствует, тип определяется по типу row_limits, dtype_hint или tf.int64.
dtype_hint Необязательный тип данных для RowPartition, используемый, когда dtype равно None. В некоторых случаях у вызывающей стороны может не быть типа данных в виду при преобразовании в тензор, поэтому dtype_hint может использоваться в качестве мягкой предпочтительной настройки. Если преобразование в dtype_hint невозможно, этот аргумент не имеет эффекта.
Возвращаемое значение
Объект RowPartition.

from_row_splits

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

@classmethod
from_row_splits(
    row_splits, validate=True, dtype=None, dtype_hint=None
)

Создаёт RowPartition, разбивая строки по row_splits.

Этот RowPartition разбивает последовательность values на строки, указывая, где начинается и заканчивается каждая строка:

partitioned_rows = []
for i in range(len(row_splits) - 1):
  row_start = row_splits[i]
  row_end = row_splits[i + 1]
  partitioned_rows.append(values[row_start:row_end])
Аргументы
row_splits Целочисленный тензор 1-D с формой [nrows+1]. Не должен быть пустым и должен быть отсортирован по возрастанию. row_splits[0] должен быть равен нулю.
validate Если True, то используются утверждения для проверки того, что аргументы образуют корректное RowPartition.
dtype Необязательный тип данных для RowPartition. Если отсутствует, тип определяется по типу row_splits, dtype_hint или tf.int64.
dtype_hint Необязательный тип данных для RowPartition, используемый, когда dtype равно None. В некоторых случаях у вызывающей стороны может не быть типа данных в виду при преобразовании в тензор, поэтому dtype_hint может использоваться в качестве мягкой предпочтительной настройки. Если преобразование в dtype_hint невозможно, этот аргумент не имеет эффекта.
Возвращаемое значение
Объект RowPartition.
Исключения
ValueError Если row_splits является пустым списком.

from_row_starts

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

@classmethod
from_row_starts(
    row_starts, nvals, validate=True, dtype=None, dtype_hint=None
)

Создаёт RowPartition, разбивая строки по row_starts.

Эквивалентно: from_row_splits(concat([row_starts, nvals], axis=0)).

Аргументы
row_starts 1-мерный целочисленный тензор с формой [nrows]. Должен быть неотрицательным и отсортированным по возрастанию. Если nrows>0, то row_starts[0] должно быть равно нулю.
nvals Скалярный тензор, указывающий количество значений.
validate Если true, то использовать утверждения для проверки, что аргументы образуют корректное разбиение RowPartition.
dtype Необязательный тип данных для RowPartition. Если отсутствует, тип определяется по типу row_starts, dtype_hint или tf.int64.
dtype_hint Необязательный тип данных для RowPartition, используемый, когда dtype равен None. В некоторых случаях у вызывающей функции может не быть типа данных в виду при преобразовании в тензор, поэтому dtype_hint может использоваться как мягкая предпочтительная настройка. Если преобразование в dtype_hint невозможно, этот аргумент не имеет эффекта.
Возвращаемое значение
Объект RowPartition.

from_uniform_row_length

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

@classmethod
from_uniform_row_length(
    uniform_row_length,
    nvals=None,
    nrows=None,
    validate=True,
    dtype=None,
    dtype_hint=None
)

Создаёт объект RowPartition с разбитыми на строки, используя uniform_row_length.

Это разбиение делит последовательность values на строки, у которых одинаковая длина:

partitioned_rows = [[values.pop(0) for _ in range(uniform_row_length)]
         for _ in range(nrows)]

Обратите внимание, что необходимо указать либо nvals, либо nrows, либо оба.

Аргументы
uniform_row_length Скалярный целочисленный тензор. Должен быть неотрицательным. Размер внешней оси values должен быть кратен uniform_row_length.
nvals Неотрицательный скалярный целочисленный тензор, обозначающий количество значений. Должен быть указан, если nrows не указан. Если не указан, по умолчанию равен uniform_row_length*nrows.
nrows Количество строк в создаваемом RowPartition. Если не указано, по умолчанию равно nvals/uniform_row_length (или 0, если uniform_row_length==0). nrows нужно указать только если uniform_row_length может быть равно нулю. uniform_row_length*nrows должно быть nvals.
validate Если true, то использовать утверждения для проверки, что аргументы образуют корректное разбиение RowPartition.
dtype Необязательный тип данных для RowPartition. Если отсутствует, тип определяется по типу uniform_row_length, dtype_hint или tf.int64.
dtype_hint Необязательный тип данных для RowPartition, используемый, когда dtype равен None. В некоторых случаях у вызывающей функции может не быть типа данных в виду при преобразовании в тензор, поэтому dtype_hint может использоваться как мягкая предпочтительная настройка. Если преобразование в dtype_hint невозможно, этот аргумент не имеет эффекта.
Возвращаемое значение
Объект RowPartition.

from_value_rowids

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

@classmethod
from_value_rowids(
    value_rowids, nrows=None, validate=True, dtype=None, dtype_hint=None
)

Создаёт объект RowPartition с разбитыми на строки, используя value_rowids.

Это разбиение делит последовательность values на строки, указывая, в какую строку должен быть добавлен каждый элемент:

partitioned_rows = [[] for _ in nrows]
for (value, rowid) in zip(values, value_rowids):
  partitioned_rows[rowid].append(value)
``

<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Args</th></tr>

<tr>
<td>
`value_rowids`
</td>
<td>
A 1-D integer tensor with shape `[nvals]`, which corresponds
one-to-one with `values`, and specifies each value's row index.  Must be
nonnegative, and must be sorted in ascending order.
</td>
</tr><tr>
<td>
`nrows`
</td>
<td>
An integer scalar specifying the number of rows.  This should be
specified if the `RowPartition` may containing empty training rows. Must
be greater than `value_rowids[-1]` (or greater than or equal to zero if
`value_rowids` is empty). Defaults to `value_rowids[-1] + 1` (or zero if
`value_rowids` is empty).
</td>
</tr><tr>
<td>
`validate`
</td>
<td>
If true, then use assertions to check that the arguments form a
valid `RowPartition`.
</td>
</tr><tr>
<td>
`dtype`
</td>
<td>
Optional dtype for the RowPartition. If missing, the type
is inferred from the type of `value_rowids`, dtype_hint, or tf.int64.
</td>
</tr><tr>
<td>
`dtype_hint`
</td>
<td>
Optional dtype for the RowPartition, used when dtype
is None. In some cases, a caller may not have a dtype in mind when
converting to a tensor, so dtype_hint can be used as a soft preference.
If the conversion to `dtype_hint` is not possible, this argument has no
effect.
</td>
</tr>
</table>



<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Returns</th></tr>
<tr class="alt">
<td colspan="2">
A `RowPartition`.
</td>
</tr>

</table>



<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Raises</th></tr>

<tr>
<td>
`ValueError`
</td>
<td>
If `nrows` is incompatible with `value_rowids`.
</td>
</tr>
</table>


#### Example:

<pre class="devsite-click-to-copy prettyprint lang-py">
<code class="devsite-terminal" data-terminal-prefix="&gt;&gt;&gt;">print(RowPartition.from_value_rowids(</code>
<code class="devsite-terminal" data-terminal-prefix="...">    value_rowids=[0, 0, 0, 0, 2, 2, 2, 3],</code>
<code class="devsite-terminal" data-terminal-prefix="...">    nrows=4))</code>
<code class="no-select nocode">tf.RowPartition(row_splits=[0 4 4 7 8])</code>
</pre>


<h3 id="is_uniform"><code>is_uniform</code></h3>

<a target="_blank" class="external" href="https://github.com/tensorflow/tensorflow/blob/v2.9.0/tensorflow/python/ops/ragged/row_partition.py#L921-L932">View source</a>

<pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
<code>is_uniform()
</code></pre>

Returns true if the partition is known to be uniform statically.

This is based upon the existence of self._uniform_row_length. For example:
RowPartition.from_row_lengths([3,3,3]).is_uniform()==false
RowPartition.from_uniform_row_length(5, nvals=20).is_uniform()==true
RowPartition.from_row_lengths([2,0,2]).is_uniform()==false

<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Returns</th></tr>
<tr class="alt">
<td colspan="2">
Whether a RowPartition is known to be uniform statically.
</td>
</tr>

</table>



<h3 id="nrows"><code>nrows</code></h3>

<a target="_blank" class="external" href="https://github.com/tensorflow/tensorflow/blob/v2.9.0/tensorflow/python/ops/ragged/row_partition.py#L777-L789">View source</a>

<pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
<code>nrows()
</code></pre>

Returns the number of rows created by this `RowPartition`.


<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Returns</th></tr>
<tr class="alt">
<td colspan="2">
scalar integer Tensor
</td>
</tr>

</table>



<h3 id="nvals"><code>nvals</code></h3>

<a target="_blank" class="external" href="https://github.com/tensorflow/tensorflow/blob/v2.9.0/tensorflow/python/ops/ragged/row_partition.py#L762-L775">View source</a>

<pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
<code>nvals()
</code></pre>

Returns the number of values partitioned by this `RowPartition`.

If the sequence partitioned by this `RowPartition` is a tensor, then
`nvals` is the size of that tensor's outermost dimension -- i.e.,
`nvals == values.shape[0]`.

<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Returns</th></tr>
<tr class="alt">
<td colspan="2">
scalar integer Tensor
</td>
</tr>

</table>



<h3 id="offsets_in_rows"><code>offsets_in_rows</code></h3>

<a target="_blank" class="external" href="https://github.com/tensorflow/tensorflow/blob/v2.9.0/tensorflow/python/ops/ragged/row_partition.py#L903-L919">View source</a>

<pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
<code>offsets_in_rows()
</code></pre>

Return the offset of each value.

RowPartition takes an array x and converts it into sublists.
offsets[i] is the index of x[i] in its sublist.
Given a shape, such as:
[*,*,*],[*,*],[],[*,*]
This returns:
0,1,2,0,1,0,1

<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Returns</th></tr>
<tr class="alt">
<td colspan="2">
an offset for every value.
</td>
</tr>

</table>



<h3 id="row_lengths"><code>row_lengths</code></h3>

<a target="_blank" class="external" href="https://github.com/tensorflow/tensorflow/blob/v2.9.0/tensorflow/python/ops/ragged/row_partition.py#L829-L840">View source</a>

<pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
<code>row_lengths()
</code></pre>

Returns the lengths of rows in this `RowPartition`.


<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Returns</th></tr>
<tr class="alt">
<td colspan="2">
A 1-D integer Tensor with shape `[self.nrows]`.
The returned tensor is nonnegative.
`tf.reduce_sum(self.row_lengths) == self.nvals()`.
</td>
</tr>

</table>



<h3 id="row_limits"><code>row_limits</code></h3>

<a target="_blank" class="external" href="https://github.com/tensorflow/tensorflow/blob/v2.9.0/tensorflow/python/ops/ragged/row_partition.py#L816-L827">View source</a>

<pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
<code>row_limits()
</code></pre>

Returns the limit indices for rows in this row partition.

These indices specify where the values for each row end.
`partition.row_limits()` is equal to `partition.row_splits()[:-1]`.

<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Returns</th></tr>
<tr class="alt">
<td colspan="2">
A 1-D integer Tensor with shape `[self.nrows]`.
The returned tensor is nonnegative, and is sorted in ascending order.
`self.row_limits()[-1] == self.nvals()`.
</td>
</tr>

</table>



<h3 id="row_splits"><code>row_splits</code></h3>

<a target="_blank" class="external" href="https://github.com/tensorflow/tensorflow/blob/v2.9.0/tensorflow/python/ops/ragged/row_partition.py#L733-L746">View source</a>

<pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
<code>row_splits()
</code></pre>

Returns the row-split indices for this row partition.

`row_splits` specifies where the values for each row begin and end.
In particular, the values for row `i` are stored in the slice
`values[row_splits[i]:row_splits[i+1]]`.

<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Returns</th></tr>
<tr class="alt">
<td colspan="2">
A 1-D integer `Tensor` with shape `[self.nrows+1]`.
The returned tensor is non-empty, and is sorted in ascending order.
`self.row_splits()[0] == 0`.
`self.row_splits()[-1] == self.nvals()`.
</td>
</tr>

</table>



<h3 id="row_starts"><code>row_starts</code></h3>

<a target="_blank" class="external" href="https://github.com/tensorflow/tensorflow/blob/v2.9.0/tensorflow/python/ops/ragged/row_partition.py#L802-L814">View source</a>

<pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
<code>row_starts()
</code></pre>

Returns the start indices for rows in this row partition.

These indices specify where the values for each row begin.
`partition.row_starts()` is equal to `partition.row_splits()[:-1]`.

<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Returns</th></tr>
<tr class="alt">
<td colspan="2">
A 1-D integer Tensor with shape `[self.nrows()]`.
The returned tensor is nonnegative, and is sorted in ascending order.
`self.row_starts()[0] == 0`.
`self.row_starts()[-1] <= self.nvals()`.
</td>
</tr>

</table>



<h3 id="uniform_row_length"><code>uniform_row_length</code></h3>

<a target="_blank" class="external" href="https://github.com/tensorflow/tensorflow/blob/v2.9.0/tensorflow/python/ops/ragged/row_partition.py#L791-L800">View source</a>

<pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
<code>uniform_row_length()
</code></pre>

Returns the length of each row in this partition, if rows are uniform.

If all rows in this `RowPartition` have the same length, then this returns
that length as a scalar integer `Tensor`.  Otherwise, it returns `None`.

<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Returns</th></tr>
<tr class="alt">
<td colspan="2">
scalar Tensor with `type=self.dtype`, or `None`.
</td>
</tr>

</table>



<h3 id="value_rowids"><code>value_rowids</code></h3>

<a target="_blank" class="external" href="https://github.com/tensorflow/tensorflow/blob/v2.9.0/tensorflow/python/ops/ragged/row_partition.py#L748-L760">View source</a>

<pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
<code>value_rowids()
</code></pre>

Returns the row indices for this row partition.

`value_rowids` specifies the row index fo reach value.  In particular,
`value_rowids[i]` is the row index for `values[i]`.

<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Returns</th></tr>
<tr class="alt">
<td colspan="2">
A 1-D integer `Tensor` with shape `[self.nvals()]`.
The returned tensor is nonnegative, and is sorted in ascending order.
</td>
</tr>

</table>



<h3 id="with_dtype"><code>with_dtype</code></h3>

<a target="_blank" class="external" href="https://github.com/tensorflow/tensorflow/blob/v2.9.0/tensorflow/python/ops/ragged/row_partition.py#L963-L986">View source</a>

<pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
<code>with_dtype(
    dtype
)
</code></pre>

Returns a copy of this RowPartition with the given encoding dtype.


<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Args</th></tr>

<tr>
<td>
`dtype`
</td>
<td>
The dtype for encoding tensors, such as `row_splits` and `nrows`.
One of <a href="../../tf#int32"><code>tf.int32</code></a> or <a href="../../tf#int64"><code>tf.int64</code></a>.
</td>
</tr>
</table>



<!-- Tabular view -->
 <table class="responsive fixed orange">
<colgroup><col width="214px"><col></colgroup>
<tr><th colspan="2">Returns</th></tr>
<tr class="alt">
<td colspan="2">
A copy of this RowPartition, with the encoding tensors cast to the given
type.
</td>
</tr>

</table>

© 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/experimental/RowPartition

Spec-Zone.ru

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