Операция извлекает поля из сериализованного сообщения буфера протокола в тензоры.
Примечание. Этот API разработан с учетом ортогональности, а не удобства для человека. Его можно использовать для анализа входных прототипов вручную, но он предназначен для использования в сгенерированном коде.
Операция `decode_proto` извлекает поля из сериализованного сообщения буфера протокола в тензоры. Поля в `field_names` декодируются и преобразуются в соответствующие `output_types`, если это возможно.
Необходимо указать имя message_type, чтобы указать контекст для имен полей. Действительный дескриптор сообщения можно найти либо в пуле связанных дескрипторов, либо по имени файла, предоставленному вызывающей стороной, с использованием атрибута `descriptor_source`.
Каждый выходной тензор является плотным тензором. Это означает, что он дополняется так, чтобы содержать наибольшее количество повторяющихся элементов, наблюдаемых во входном мини-пакете. (Форма также дополняется единицей, чтобы предотвратить нулевые размеры). Фактическое количество повторений для каждого примера в мини-пакете можно найти в выводе «размеры». Во многих случаях выходные данные `decode_proto` немедленно передаются в tf.squeeze, если пропущенные значения не вызывают беспокойства. При использовании tf.squeeze всегда передавайте измерение сжатия явно, чтобы избежать сюрпризов.
По большей части сопоставление между типами полей Proto и типами TensorFlow является простым. Однако есть несколько особых случаев:
- Поле прототипа, содержащее подсообщение или группу, может быть преобразовано только в `DT_STRING` (сериализованное подсообщение). Это сделано для уменьшения сложности API. Полученную строку можно использовать в качестве входных данных для другого экземпляра операции decode_proto.
— В TensorFlow отсутствует поддержка целых чисел без знака. Операции представляют типы uint64 как `DT_INT64` с тем же битовым шаблоном с двоичным дополнением (очевидным способом). Беззнаковые значения int32 можно представить точно, указав тип `DT_INT64` или используя дополнение до двух, если вызывающая сторона указывает `DT_INT32` в атрибуте `output_types`.
- Поля `map` не декодируются напрямую. Они рассматриваются как «повторяющиеся» поля соответствующего типа записи. Протокомпилятор определяет типы записей для каждого поля карты. Имя типа — это имя поля, преобразованное в «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`.
- "байт://
Вложенные классы
сорт | ДекодированиеПрото.Параметры | Дополнительные атрибуты для DecodeProto |
Публичные методы
статический декодированиепрото | create (область области действия , байты операнда <String>, String messageType, List<String> имена полей, List<Class<?>> выходные типы, параметры... параметры) Фабричный метод для создания класса, обертывающего новую операцию DecodeProto. |
статический DecodeProto.Options | descriptorSource (строковый источник дескриптора) |
статический DecodeProto.Options | messageFormat (строка messageFormat) |
статический DecodeProto.Options | санировать (логическая санация) |
Вывод <Целое число> | размеры () Тензор int32 с формой `[batch_shape, len(field_names)]`. |
Список< Вывод <?>> | ценности () Список тензоров, содержащих значения для соответствующего поля. |
Унаследованные методы
Публичные методы
public static DecodeProto create (область области действия , байты операнда <String>, String messageType, List<String> имена полей, List<Class<?>> выходные типы, параметры... параметры)
Фабричный метод для создания класса, обертывающего новую операцию DecodeProto.
Параметры
объем | текущий объем |
---|---|
байты | Тензор сериализованных прототипов с формой `batch_shape`. |
тип сообщения | Имя типа прото-сообщения для декодирования. |
имена полей | Список строк, содержащих имена протополей. Поле расширения можно декодировать, используя его полное имя, например EXT_PACKAGE.EXT_FIELD_NAME. |
типы вывода | Список типов TF, которые будут использоваться для соответствующего поля в field_names. |
параметры | содержит значения необязательных атрибутов |
Возврат
- новый экземпляр DecodeProto
общедоступный статический DecodeProto.Options descriptorSource (String descriptorSource)
Параметры
дескрипторИсточник | Либо специальное значение `local://`, либо путь к файлу, содержащему сериализованный `FileDescriptorSet`. |
---|
общедоступный статический DecodeProto.Options messageFormat (String messageFormat)
Параметры
Формат сообщения | Либо «двоичный», либо text . |
---|
public static DecodeProto.Options санировать (логическое санирование)
Параметры
дезинфицировать | Санировать результат или нет. |
---|
размеры общедоступного вывода <Integer> ()
Тензор int32 с формой `[batch_shape, len(field_names)]`. Каждая запись представляет собой количество значений, найденных для соответствующего поля. Необязательные поля могут иметь значения 0 или 1.
public List< Output <?>> значения ()
Список тензоров, содержащих значения для соответствующего поля. `values[i]` имеет тип данных `output_types[i]` и форму `[batch_shape, max(sizes[...,i])]`.