tf.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 с одним или несколькими RowPartition, обеспечивая полное кодирование разреженного тензора (т. е. тензора с переменными длинами измерений).
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— целочисленное скалярное значение, указывающее длину каждой строки. Эта схема может быть использована только в том случае, если все строки имеют одинаковую длину.
Например, следующие RowPartition все представляют разбиение 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>.
| Args | |
|---|---|
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]
| Args | |
|---|---|
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)).
| Args | |
|---|---|
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-мерный целочисленный тензор с формой [nrows+1]. Не должен быть пустым и должен быть отсортирован по возрастанию. row_splits[0] должно быть равно нулю. |
validate | Если истинно, то использовать утверждения для проверки того, что аргументы образуют допустимый RowPartition. |
dtype | Необязательный тип данных для RowPartition. Если отсутствует, тип определяется по типу row_splits, dtype_hint или tf.int64. |
dtype_hint | Необязательный тип данных для RowPartition, используемый, когда dtype равен None. В некоторых случаях вызывающий код может не иметь в виду тип данных при преобразовании в тензор, поэтому dtype_hint может использоваться в качестве мягкой рекомендации. Если преобразование в dtype_hint невозможно, этот аргумент не оказывает влияния. |
| Возвращаемое значение | |
|---|---|
A 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 | Если истинно, то использовать утверждения для проверки того, что аргументы образуют допустимый RowPartition. |
dtype | Необязательный тип данных для RowPartition. Если отсутствует, тип определяется по типу row_starts, dtype_hint или tf.int64. |
dtype_hint | Необязательный тип данных для RowPartition, используемый, когда dtype равен None. В некоторых случаях вызывающий код может не иметь в виду тип данных при преобразовании в тензор, поэтому dtype_hint может использоваться в качестве мягкой рекомендации. Если преобразование в dtype_hint невозможно, этот аргумент не оказывает влияния. |
| Возвращаемое значение | |
|---|---|
A 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.
Это RowPartition делит последовательность 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 | Если истинно, то использовать утверждения для проверки того, что аргументы образуют допустимый RowPartition. |
dtype | Необязательный тип данных для RowPartition. Если отсутствует, тип определяется по типу uniform_row_length, dtype_hint или tf.int64. |
dtype_hint | Необязательный тип данных для RowPartition, используемый, когда dtype равен None. В некоторых случаях вызывающий код может не иметь в виду тип данных при преобразовании в тензор, поэтому dtype_hint может использоваться в качестве мягкой рекомендации. Если преобразование в dtype_hint невозможно, этот аргумент не оказывает влияния. |
| Возвращаемое значение | |
|---|---|
A RowPartition. |
from_value_rowids
@classmethod
from_value_rowids(
value_rowids, nrows=None, validate=True, dtype=None, dtype_hint=None
)
Создаёт RowPartition с разбиением строк по value_rowids.
Это RowPartition делит последовательность values на строки, задавая строку для каждого значения:
partitioned_rows = [[] for _ in nrows] for (value, rowid) in zip(values, value_rowids): partitioned_rows[rowid].append(value)
| Аргументы | |
|---|---|
value_rowids | 1-мерный целочисленный тензор с формой [nvals], который соответствует каждому значению values и задаёт индекс строки для каждого значения. Должен быть неотрицательным и отсортирован по возрастанию. |
nrows | Целочисленный скаляр, указывающий количество строк. Это должно быть указано, если RowPartition может содержать пустые тренировочные строки. Должно быть больше value_rowids[-1] (или больше или равно нулю, если value_rowids пусто). По умолчанию равно value_rowids[-1] + 1 (или нулю, если value_rowids пусто). |
validate | Если истинно, то использовать утверждения для проверки того, что аргументы образуют допустимый RowPartition. |
dtype | Необязательный тип данных для RowPartition. Если отсутствует, тип определяется по типу value_rowids, dtype_hint или tf.int64. |
dtype_hint | Необязательный тип данных для RowPartition, используемый, когда dtype равен None. В некоторых случаях вызывающий код может не иметь в виду тип данных при преобразовании в тензор, поэтому dtype_hint может использоваться в качестве мягкой рекомендации. Если преобразование в dtype_hint невозможно, этот аргумент не оказывает влияния. |
| Возвращаемое значение | |
|---|---|
A RowPartition. |
| Исключения | |
|---|---|
ValueError | Если nrows несовместим с value_rowids. |
Пример:
print(RowPartition.from_value_rowids(
value_rowids=[0, 0, 0, 0, 2, 2, 2, 3],
nrows=4))
tf.RowPartition(row_splits=[0 4 4 7 8])is_uniform
is_uniform()
Возвращает true, если разбиение известно как однородное статически.
Это основано на существовании self._uniform_row_length. Например: 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
| Возвращаемое значение | |
|---|---|
| Является ли RowPartition известным как однородным статически. |
nrows
nrows()
Возвращает количество строк, созданных этим RowPartition.
| Возвращаемое значение | |
|---|---|
| скалярный целочисленный тензор |
nvals
nvals()
Возвращает количество значений, разнесённых этим RowPartition.
Если последовательность, разнесённая этим RowPartition, является тензором, то nvals соответствует размеру внешнего измерения этого тензора — т. е. nvals == values.shape[0].
| Возвращаемое значение | |
|---|---|
| скалярный целочисленный тензор |
offsets_in_rows
offsets_in_rows()
Возвращает смещение каждого значения.
RowPartition принимает массив x и преобразует его в подсписки. offsets[i] — это индекс x[i] в его подсписке. При данной форме, такой как: [,,],[,],[],[,*] Это возвращает: 0,1,2,0,1,0,1
| Возвращаемое значение | |
|---|---|
| смещение для каждого значения. |
row_lengths
row_lengths()
Возвращает длины строк в этом RowPartition.
| Возвращает | |
|---|---|
Целочисленный тензор 1-D с формой [self.nrows]. Возвращаемый тензор неотрицательный. tf.reduce_sum(self.row_lengths) == self.nvals(). |
row_limits
row_limits()
Возвращает предельные индексы строк в этом разбиении по строкам.
Эти индексы указывают, где заканчиваются значения для каждой строки. partition.row_limits() равно partition.row_splits()[:-1].
| Возвращает | |
|---|---|
Целочисленный тензор 1-D с формой [self.nrows]. Возвращаемый тензор неотрицательный и отсортирован по возрастанию. self.row_limits()[-1] == self.nvals(). |
row_splits
row_splits()
Возвращает индексы разбиения по строкам для этого разбиения по строкам.
row_splits указывает, где начинаются и заканчиваются значения для каждой строки. В частности, значения для строки i хранятся в срезе values[row_splits[i]:row_splits[i+1]].
| Возвращает | |
|---|---|
Целочисленный тензор 1-D Tensor с формой [self.nrows+1]. Возвращаемый тензор не пустой и отсортирован по возрастанию. self.row_splits()[0] == 0. self.row_splits()[-1] == self.nvals(). |
row_starts
row_starts()
Возвращает начальные индексы строк в этом разбиении по строкам.
Эти индексы указывают, где начинаются значения для каждой строки. partition.row_starts() равно partition.row_splits()[:-1].
| Возвращает | |
|---|---|
Целочисленный тензор 1-D с формой [self.nrows()]. Возвращаемый тензор неотрицательный и отсортирован по возрастанию. self.row_starts()[0] == 0. self.row_starts()[-1] <= self.nvals(). |
uniform_row_length
uniform_row_length()
Возвращает длину каждой строки в этом разбиении, если строки однородны.
Если у всех строк в этом RowPartition одинаковая длина, то это возвращает эту длину как скалярное целое число Tensor. В противном случае, возвращается None.
| Возвращает | |
|---|---|
скалярный тензор с type=self.dtype или None. |
value_rowids
value_rowids()
Возвращает индексы строк для этого разбиения по строкам.
value_rowids указывает индекс строки для каждого значения. В частности, value_rowids[i] является индексом строки для values[i].
| Возвращает | |
|---|---|
Целочисленный тензор 1-D Tensor с формой [self.nvals()]. Возвращаемый тензор неотрицательный и отсортирован по возрастанию. |
with_dtype
with_dtype(
dtype
)
Возвращает копию этого RowPartition с указанным типом кодирования.
| Аргументы | |
|---|---|
dtype | Тип данных для кодирования тензоров, таких как row_splits и nrows. Один из tf.int32 или tf.int64. |
| Возвращает | |
|---|---|
| Копия этого RowPartition, с тензорами кодирования, преобразованными к заданному типу. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/experimental/RowPartition