Spec-Zone.ru › TensorFlow

tf.raw_ops.DecodeProtoV2

Операция извлекает поля из сериализованного сообщения протобуффера в тензоры.

Псевдонимы

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

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

tf.compat.v1.raw_ops.DecodeProtoV2

tf.raw_ops.DecodeProtoV2(
    bytes,
    message_type,
    field_names,
    output_types,
    descriptor_source='local://',
    message_format='binary',
    sanitize=False,
    name=None
)
Примечание: Этот API разработан для ортогональности, а не для удобства использования человеком. Его можно использовать для ручного разбора входных протобуфферов, но он предназначен для использования в сгенерированном коде.

Операция decode_proto извлекает поля из сериализованного сообщения протобуффера в тензоры. Поля в field_names декодируются и преобразуются в соответствующие output_types, если это возможно.

Необходимо указать имя message_type, чтобы предоставить контекст для имён полей. Фактический описатель сообщения можно найти либо в связанном пуле описателей, либо в имени файла, предоставленном вызывающим методом с помощью атрибута descriptor_source.

Каждый выходной тензор является плотным тензором. Это означает, что он заполняется до максимального количества повторяющихся элементов, обнаруженных в входной мини-парттии. (Размер также увеличивается на единицу, чтобы предотвратить нулевые размерности). Фактическое количество повторений для каждого примера в мини-парттии можно найти в выходных данных sizes. Во многих случаях выход decode_proto сразу же передаётся в tf.squeeze, если пропущенные значения не вызывают проблем. При использовании tf.squeeze всегда явно передавайте размер сжатия, чтобы избежать неожиданностей.

В основном, отображение между типами полей протобуффера и типами данных TensorFlow является простым. Однако есть несколько особых случаев:

  • Поле протобуффера, содержащее подсообщение или группу, может быть преобразовано только в DT_STRING (сериализованное подсообщение). Это сделано для уменьшения сложности API. Результирующую строку можно использовать как вход для другого экземпляра операции decode_proto.

  • В TensorFlow нет поддержки для беззнаковых целых чисел. Операции представляют типы uint64 как DT_INT64 с тем же битовым шаблоном дополнительного кода (очевидным способом). Беззнаковые значения int32 могут быть точно представлены, указав тип DT_INT64 или используя дополнительный код, если вызывающий метод указывает DT_INT32 в атрибуте output_types.

  • Поля map не декодируются непосредственно. Они обрабатываются как поля repeated соответствующего типа входа. Компилятор протобуффера определяет типы входов для каждого поля типа «карта». Имя типа — это имя поля, преобразованное в «CamelCase» с добавленным «Entry». Сообщение tf.train.Features.FeatureEntry является примером одного из этих неявных типов Entry.

  • Поля enum должны читаться как int32.

Поддерживается сериализация протобуфферов как в бинарном, так и в текстовом формате, и выбор осуществляется с помощью атрибута format.

Атрибут descriptor_source выбирает источник описателей протобуфферов для поиска message_type. Это может быть:

  • Пустая строка или «local://», в этом случае описатели протобуфферов создаются для C++ (а не Python) определений протобуфферов, связанных с бинарным файлом.

  • Файл, в этом случае описатели протобуфферов создаются из файла, который ожидается, что он содержит сериализованный FileDescriptorSet в виде строки. ПРИМЕЧАНИЕ: Вы можете создать файл descriptor_source, используя параметры --descriptor_set_out и --include_imports компилятора протобуфферов protoc.

  • «bytes://», в этом случае описатели протобуфферов создаются из <bytes>, который ожидается, что он содержит сериализованный FileDescriptorSet в виде строки.

Пример:

Внутренний протобуффер Summary.Value содержит oneof {float simple_value; Image image; ...}

from google.protobuf import text_format

# A Summary.Value contains: oneof {float simple_value; Image image}
values = [
   "simple_value: 2.2",
   "simple_value: 1.2",
   "image { height: 128 width: 512 }",
   "image { height: 256 width: 256 }",]
values = [
   text_format.Parse(v, tf.compat.v1.Summary.Value()).SerializeToString()
   for v in values]

Следующее может декодировать оба поля из сериализованных строк:

sizes, [simple_value, image]  = tf.io.decode_proto(
 values,
 tf.compat.v1.Summary.Value.DESCRIPTOR.full_name,
 field_names=['simple_value', 'image'],
 output_types=[tf.float32, tf.string])

sizes имеет ту же форму, что и вход, с дополнительной осью по полям, которые были декодированы. Здесь первый столбец sizes — размер декодированного поля simple_value:

print(sizes)
tf.Tensor(
[[1 0]
 [1 0]
 [0 1]
 [0 1]], shape=(4, 2), dtype=int32)

Результирующие тензоры имеют на один индекс больше, чем входные байтовые строки. Действительные элементы каждого результирующего тензора указаны соответствующим столбцом sizes. Недействительные элементы заполняются значением по умолчанию:

print(simple_value)
tf.Tensor(
[[2.2]
 [1.2]
 [0. ]
 [0. ]], shape=(4, 1), dtype=float32)

Вложенные протобуфферы извлекаются как строковые тензоры:

print(image.dtype)
<dtype: 'string'>
print(image.shape.as_list())
[4, 1]

Для преобразования в представление tf.RaggedTensor используйте:

tf.RaggedTensor.from_tensor(simple_value, lengths=sizes[:, 0]).to_list()
[[2.2], [1.2], [], []]
Аргументы
bytes Tensor типа string. Тензор сериализованных протобуфферов с формой batch_shape.
message_type 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 Tensor типа int32.
values Список объектов Tensor типа output_types.

© 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/raw_ops/DecodeProtoV2

Spec-Zone.ru

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