tf.io.RaggedFeature
Настройка для передачи входного признака RaggedTensor.
tf.io.RaggedFeature(
dtype, value_key=None, partitions=(), row_splits_dtype=tf.dtypes.int32,
validate=False
)
value_key определяет ключ признака для переменной длины списка значений; а partitions определяет ноль или более ключей признаков для разбиения этих значений на более высокие размерности. Каждый элемент partitions должен быть одним из следующих:
tf.io.RaggedFeature.RowSplits(key: string)tf.io.RaggedFeature.RowLengths(key: string)tf.io.RaggedFeature.RowStarts(key: string)tf.io.RaggedFeature.RowLimits(key: string)tf.io.RaggedFeature.ValueRowIds(key: string)-
tf.io.RaggedFeature.UniformRowLength(length: int).
Где key — это ключ признака, значения которого используются для разбиения значений. Разбиения перечислены от внешнего к внутреннему.
-
Если
len(partitions) == 0(по умолчанию), то:- Признак из одного
tf.Exampleанализируется в 1Dtf.Tensor. - Признак из набора
tf.Exampleанализируется в 2Dtf.RaggedTensor, где внешняя размерность — это размерность пакета, а внутренняя (разреженная) размерность — это длина признака в каждом примере.
- Признак из одного
-
Если
len(partitions) == 1, то:Признак из одного
tf.Exampleанализируется в 2Dtf.RaggedTensor, где значения, взятые изvalue_keyразделяются на строки с использованием ключа разбиения.Признак из набора
tf.Exampleанализируется в 3Dtf.RaggedTensor, где внешняя размерность — это размерность пакета, а две внутренние размерности формируются путем разделения значенийvalue_keyиз каждого примера на строки с использованием ключа разбиения этого примера.
-
Если
len(partitions) > 1, то:Признак из одного
tf.Exampleанализируется вtf.RaggedTensor, чья ранг —len(partitions)+1, и чья разреженная ранг —len(partitions).Признак из набора
tf.Exampleанализируется вtf.RaggedTensor, чья ранг —len(partitions)+2и чья разреженная ранг —len(partitions)+1, где внешняя размерность — это размерность пакета.
Есть одно исключение: если последний (то есть внутренний) элемент(ы) partitions являются UniformRowLength , то значения просто переформатируются (как многомерный tf.Tensor), а не оборачиваются в tf.RaggedTensor.
Примеры
import google.protobuf.text_format as pbtext
example_batch = [
pbtext.Merge(r'''
features {
feature {key: "v" value {int64_list {value: [3, 1, 4, 1, 5, 9]} } }
feature {key: "s1" value {int64_list {value: [0, 2, 3, 3, 6]} } }
feature {key: "s2" value {int64_list {value: [0, 2, 3, 4]} } }
}''', tf.train.Example()).SerializeToString(),
pbtext.Merge(r'''
features {
feature {key: "v" value {int64_list {value: [2, 7, 1, 8, 2, 8, 1]} } }
feature {key: "s1" value {int64_list {value: [0, 3, 4, 5, 7]} } }
feature {key: "s2" value {int64_list {value: [0, 1, 1, 4]} } }
}''', tf.train.Example()).SerializeToString()]
features = {
# Zero partitions: returns 1D tf.Tensor for each Example.
'f1': tf.io.RaggedFeature(value_key="v", dtype=tf.int64),
# One partition: returns 2D tf.RaggedTensor for each Example.
'f2': tf.io.RaggedFeature(value_key="v", dtype=tf.int64, partitions=[
tf.io.RaggedFeature.RowSplits("s1")]),
# Two partitions: returns 3D tf.RaggedTensor for each Example.
'f3': tf.io.RaggedFeature(value_key="v", dtype=tf.int64, partitions=[
tf.io.RaggedFeature.RowSplits("s2"),
tf.io.RaggedFeature.RowSplits("s1")])
}
feature_dict = tf.io.parse_single_example(example_batch[0], features)
for (name, val) in sorted(feature_dict.items()):
print('%s: %s' % (name, val))
f1: tf.Tensor([3 1 4 1 5 9], shape=(6,), dtype=int64)
f2: <tf.RaggedTensor [[3, 1], [4], [], [1, 5, 9]]>
f3: <tf.RaggedTensor [[[3, 1], [4]], [[]], [[1, 5, 9]]]>
feature_dict = tf.io.parse_example(example_batch, features)
for (name, val) in sorted(feature_dict.items()):
print('%s: %s' % (name, val))
f1: <tf.RaggedTensor [[3, 1, 4, 1, 5, 9],
[2, 7, 1, 8, 2, 8, 1]]>
f2: <tf.RaggedTensor [[[3, 1], [4], [], [1, 5, 9]],
[[2, 7, 1], [8], [2], [8, 1]]]>
f3: <tf.RaggedTensor [[[[3, 1], [4]], [[]], [[1, 5, 9]]],
[[[2, 7, 1]], [], [[8], [2], [8, 1]]]]>
Поля:
-
dtype: Тип данныхRaggedTensor. Должен быть одним из:tf.dtypes.int64,tf.dtypes.float32,tf.dtypes.string. -
value_key: (Необязательно.) Ключ дляFeatureво входномExample, чьи проанализированныеTensorстанут результирующимиRaggedTensor.flat_values. Если не указано, то по умолчанию — ключ для этогоRaggedFeature. -
partitions: (Необязательно.) Список объектов, определяющих тензоры разбиения строк (от внешнего к внутреннему). Каждый элемент этого списка должен быть одним из:tf.io.RaggedFeature.RowSplits(key: string)tf.io.RaggedFeature.RowLengths(key: string)tf.io.RaggedFeature.RowStarts(key: string)tf.io.RaggedFeature.RowLimits(key: string)tf.io.RaggedFeature.ValueRowIds(key: string)-
tf.io.RaggedFeature.UniformRowLength(length: int). Гдеkey— это ключ дляFeatureво входномExample, чьи проанализированныеTensorстанут результирующим тензором разбиения строк.
-
row_splits_dtype: (Необязательно.) Тип данных для тензора(ов) разбиения строк. Один изint32илиint64. По умолчаниюint32. -
validate: (Необязательно.) Булево значение, указывающее, следует ли проверять, образуют ли входные значения корректный RaggedTensor. По умолчаниюFalse.
| Атрибуты | |
|---|---|
dtype | |
value_key | |
partitions | |
row_splits_dtype | |
validate | |
Подклассы
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/io/RaggedFeature