tf.io.decode_proto
Операция извлекает поля из сериализованного сообщения протобуффера в тензоры.
tf.io.decode_proto(
bytes, message_type, field_names, output_types,
descriptor_source='local://', message_format='binary',
sanitize=False, name=None
)
Операция decode_proto извлекает поля из сериализованного сообщения протобуффера в тензоры. Поля в field_names декодируются и преобразуются в соответствующие output_types, если это возможно.
Необходимо указать имя message_type, чтобы задать контекст для имен полей. Фактическое описание сообщения можно найти либо в подключенном пуле описаний, либо в файле, указанном вызывающей стороной с помощью атрибута descriptor_source.
Каждый выходной тензор — это плотный тензор. Это означает, что он дополняется до наибольшего числа повторяющихся элементов, встречающихся в входной мини-пачке. (Размерность также дополняется на единицу, чтобы предотвратить нулевые размеры). Фактическое количество повторений для каждого примера в мини-пачке можно найти в выходном sizes. Во многих случаях выход decode_proto сразу передается в tf.squeeze, если пропущенные значения не вызывают опасений. При использовании tf.squeeze всегда явно передавайте размерность squeeze, чтобы избежать неожиданностей.
В большинстве случаев сопоставление между типами полей прото и типами данных TensorFlow прямолинейно. Однако есть несколько особых случаев:
Поле прото, содержащее подсообщение или группу, может быть преобразовано только в
DT_STRING(сериализованное подсообщение). Это сделано для уменьшения сложности API. Полученная строка может быть использована в качестве входных данных для другой операции decode_proto.В TensorFlow нет поддержки беззнаковых целых чисел. Операции представляют типы uint64 в виде
DT_INT64с той же битовой моделью дополнительного кода (очевидный способ). Беззнаковые значения int32 можно точно представить, указав типDT_INT64, или с помощью дополнительного кода, если вызывающая сторона указываетDT_INT32в атрибутеoutput_types.
Поддерживается сериализация протобуфферов в бинарном и текстовом форматах, выбор можно осуществить с помощью атрибута format.
Атрибут descriptor_source выбирает источник описаний протоколов для поиска message_type. Это может быть:
Пустая строка или «local://», в этом случае описания протоколов создаются для определений протоколов C++ (а не Python), связанных с двоичным файлом.
Файл, в этом случае описания протоколов создаются из файла, который, как ожидается, содержит сериализованный
FileDescriptorSetв виде строки. ПРИМЕЧАНИЕ: Вы можете создать файлdescriptor_sourceс помощью опций--descriptor_set_outи--include_importsкомпилятора протоколовprotoc.«bytes://
», в этом случае описания протоколов создаются из <bytes>, которая, как ожидается, является сериализованнымFileDescriptorSetв виде строки.
| Аргументы | |
|---|---|
bytes | A Tensor типа string. Тензор сериализованных прото с формой batch_shape. |
message_type | A string. Имя типа сообщения прото, которое необходимо декодировать. |
field_names | Список strings. Список строк, содержащих имена полей прото. Поле расширения можно декодировать, используя его полное имя, например EXT_PACKAGE.EXT_FIELD_NAME. |
output_types | Список tf.DTypes. Список типов TF, которые следует использовать для соответствующего поля в field_names. |
descriptor_source | Необязательный string. По умолчанию "local://". Либо специальное значение local://, либо путь к файлу, содержащему сериализованный FileDescriptorSet. |
message_format | Необязательный string. По умолчанию "binary". Либо binary, либо text. |
sanitize | Необязательный bool. По умолчанию False. Нужно ли очищать результат. |
name | Имя операции (необязательно). |
| Возвращаемые значения | |
|---|---|
Кортеж объектов Tensor (размеры, значения). | |
sizes | A Tensor типа int32. |
values | Список объектов Tensor типа output_types. |
© 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.4/api_docs/python/tf/io/decode_proto