tf.io.parse_example
Разбирает протобуферы Example в dict тензоров.
tf.io.parse_example(
serialized, features, example_names=None, name=None
)
Используется в блокнотах
| Используется в руководстве | Используется в учебных материалах |
|---|---|
Разбирает заданное в serialized количество сериализованных протобуферов Example. Мы называем serialized пакетом из batch_size отдельных протобуферов Example.
example_names может содержать описательные имена соответствующих сериализованных протобуферов. Они могут быть полезны для отладки, но не влияют на результат. Если None не задано, длина example_names должна совпадать с длиной serialized.
Эта операция разбирает сериализованные примеры в словарь, сопоставляющий ключи значениям Tensor SparseTensor и объектам RaggedTensor. features — это сопоставление ключей с объектами VarLenFeature, SparseFeature, RaggedFeature и FixedLenFeature. Каждый VarLenFeature и SparseFeature сопоставляется с SparseTensor; каждый FixedLenFeature сопоставляется с Tensor; каждый RaggedFeature сопоставляется с RaggedTensor.
Каждый VarLenFeature сопоставляется с SparseTensor указанного типа, представляющим разреженную матрицу. Её индексы имеют вид [batch, index], где batch указывает пример в serialized, а index — индекс значения в списке значений, связанных с этим признаком и примером.
Каждый SparseFeature сопоставляется с SparseTensor указанного типа, представляющим тензор из dense_shape [batch_size] + SparseFeature.size. Его values берутся из признака с ключом value_key в примерах. Значение values[i] берётся из позиции k признака примера с индексом batch в пакете. Эта позиционная информация записывается в indices[i] как [batch, index_0, index_1, ...], где index_j — это значение k-th признака примера с ключом SparseFeature.index_key[j]. Другими словами, мы разделяем индексы SparseTensor (кроме первого индекса, указывающего на элемент пакета) по измерениям и помещаем их в разные признаки Example. Из-за сложности VarLenFeature по возможности следует предпочитать SparseFeature.
Каждый FixedLenFeature df сопоставляется с Tensor указанного типа (или tf.float32, если тип не указан) и формы (serialized.size(),) + df.shape.
Записи FixedLenFeature с default_value являются необязательными. Если значение по умолчанию не задано, будет выдана ошибка, если этот Feature отсутствует в каком-либо примере из serialized.
Каждый FixedLenSequenceFeature df сопоставляется с Tensor указанного типа (или tf.float32, если тип не указан) и формы (serialized.size(), None) + df.shape. Во всех примерах из serialized вдоль второго измерения будут добавлены default_value.
Каждый RaggedFeature сопоставляется с RaggedTensor указанного типа. Он формируется путём объединения RaggedTensor для каждого примера, где RaggedTensor для отдельного примера создаётся с использованием тензоров, заданных в RaggedTensor.values_key, и RaggedTensor.partition. Подробные сведения и примеры см. в документации по tf.io.RaggedFeature.
Примеры:
Например, если ожидается ft типа tf.float32 VarLenFeature и предоставлены три сериализованных объекта Example:
serialized = [
features
{ feature { key: "ft" value { float_list { value: [1.0, 2.0] } } } },
features
{ feature []},
features
{ feature { key: "ft" value { float_list { value: [3.0] } } }
]
результат будет выглядеть так:
{"ft": SparseTensor(indices=[[0, 0], [0, 1], [2, 0]],
values=[1.0, 2.0, 3.0],
dense_shape=(3, 2)) }
Если вместо этого используется FixedLenSequenceFeature с default_value = -1.0 и shape=[], результат будет выглядеть так:
{"ft": [[1.0, 2.0], [3.0, -1.0]]}
Пусть в serialized заданы два входных протобуфера Example:
[
features {
feature { key: "kw" value { bytes_list { value: [ "knit", "big" ] } } }
feature { key: "gps" value { float_list { value: [] } } }
},
features {
feature { key: "kw" value { bytes_list { value: [ "emmy" ] } } }
feature { key: "dank" value { int64_list { value: [ 42 ] } } }
feature { key: "gps" value { } }
}
]
И аргументы
example_names: ["input0", "input1"],
features: {
"kw": VarLenFeature(tf.string),
"dank": VarLenFeature(tf.int64),
"gps": VarLenFeature(tf.float32),
}
Тогда результатом будет словарь:
{
"kw": SparseTensor(
indices=[[0, 0], [0, 1], [1, 0]],
values=["knit", "big", "emmy"]
dense_shape=[2, 2]),
"dank": SparseTensor(
indices=[[1, 0]],
values=[42],
dense_shape=[2, 1]),
"gps": SparseTensor(
indices=[],
values=[],
dense_shape=[2, 0]),
}
Для плотных результатов в двух сериализованных объектах Example:
[
features {
feature { key: "age" value { int64_list { value: [ 0 ] } } }
feature { key: "gender" value { bytes_list { value: [ "f" ] } } }
},
features {
feature { key: "age" value { int64_list { value: [] } } }
feature { key: "gender" value { bytes_list { value: [ "f" ] } } }
}
]
Можно использовать аргументы:
example_names: ["input0", "input1"],
features: {
"age": FixedLenFeature([], dtype=tf.int64, default_value=-1),
"gender": FixedLenFeature([], dtype=tf.string),
}
Ожидаемый результат:
{
"age": [[0], [-1]],
"gender": [["f"], ["f"]],
}
В качестве альтернативы VarLenFeature для получения SparseTensor можно использовать SparseFeature. Например, пусть в serialized заданы два входных протобуфера Example:
[
features {
feature { key: "val" value { float_list { value: [ 0.5, -1.0 ] } } }
feature { key: "ix" value { int64_list { value: [ 3, 20 ] } } }
},
features {
feature { key: "val" value { float_list { value: [ 0.0 ] } } }
feature { key: "ix" value { int64_list { value: [ 42 ] } } }
}
]
И аргументы
example_names: ["input0", "input1"],
features: {
"sparse": SparseFeature(
index_key="ix", value_key="val", dtype=tf.float32, size=100),
}
Тогда результатом будет словарь:
{
"sparse": SparseTensor(
indices=[[0, 3], [0, 20], [1, 42]],
values=[0.5, -1.0, 0.0]
dense_shape=[2, 100]),
}
Примеры использования RaggedFeature для получения RaggedTensor см. в документации по tf.io.RaggedFeature.
| Аргументы | |
|---|---|
serialized | Вектор (1D-тензор) строк — пакет двоичных сериализованных протобуферов Example. |
features | Сопоставление ключей признаков со значениями FixedLenFeature, VarLenFeature, SparseFeature и RaggedFeature. |
example_names | Вектор (1D-тензор) строк (необязательно) — имена сериализованных протобуферов в пакете. |
name | Имя этой операции (необязательно). |
| Возвращает | |
|---|---|
Сопоставление dict ключей признаков со значениями Tensor, SparseTensor и RaggedTensor. |
| Вызывает исключения | |
|---|---|
ValueError | если какой-либо признак недопустим. |
© 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/io/parse_example