연산은 직렬화된 프로토콜 버퍼 메시지의 필드를 텐서로 추출합니다.
참고: 이 API는 인간 친화적이기보다는 직교성을 위해 설계되었습니다. 입력 proto를 직접 구문 분석하는 데 사용할 수 있지만 생성된 코드에서 사용하기 위한 것입니다.
`decode_proto` 작업은 직렬화된 프로토콜 버퍼 메시지의 필드를 텐서로 추출합니다. 가능하면 `field_names`의 필드가 디코딩되어 해당 `output_types`로 변환됩니다.
필드 이름에 대한 컨텍스트를 제공하려면 `message_type` 이름을 제공해야 합니다. 실제 메시지 설명자는 연결된 설명자 풀이나 'descriptor_source' 속성을 사용하여 호출자가 제공한 파일 이름에서 조회할 수 있습니다.
각 출력 텐서는 밀집 텐서입니다. 이는 입력 미니배치에서 볼 수 있는 가장 많은 수의 반복 요소를 보유하기 위해 채워졌음을 의미합니다. (크기가 0이 되는 것을 방지하기 위해 모양도 1씩 채워집니다.) 미니배치의 각 예시에 대한 실제 반복 횟수는 `sizes` 출력에서 확인할 수 있습니다. 많은 경우 누락된 값이 문제가 되지 않으면 `decode_proto`의 출력이 즉시 tf.squeeze에 제공됩니다. tf.squeeze를 사용할 때 예상치 못한 상황을 피하기 위해 항상 squeeze 차원을 명시적으로 전달하세요.
대부분의 경우 Proto 필드 유형과 TensorFlow dtype 간의 매핑은 간단합니다. 그러나 몇 가지 특별한 경우가 있습니다:
- 하위 메시지나 그룹을 포함하는 proto 필드는 'DT_STRING'(직렬화된 하위 메시지)로만 변환될 수 있습니다. 이는 API의 복잡성을 줄이기 위한 것입니다. 결과 문자열은 decode_proto 작업의 다른 인스턴스에 대한 입력으로 사용될 수 있습니다.
- TensorFlow는 부호 없는 정수에 대한 지원이 부족합니다. ops는 uint64 유형을 동일한 2의 보수 비트 패턴을 갖는 `DT_INT64`로 나타냅니다(명백한 방법). 부호 없는 int32 값은 `DT_INT64` 유형을 지정하거나 호출자가 `output_types` 속성에 `DT_INT32`를 지정한 경우 2의 보수를 사용하여 정확하게 표현할 수 있습니다.
- `map` 필드는 직접 디코딩되지 않습니다. 이는 적절한 항목 유형의 `반복` 필드로 처리됩니다. 프로토 컴파일러는 각 맵 필드에 대한 항목 유형을 정의합니다. type-name은 "Entry"가 추가된 "CamelCase"로 변환된 필드 이름입니다. tf.train.Features.FeatureEntry
메시지는 이러한 암시적 'Entry' 유형 중 하나의 예입니다.
- `enum` 필드는 int32로 읽어야 합니다.
바이너리 및 텍스트 proto 직렬화가 모두 지원되며 `format` 속성을 사용하여 선택할 수 있습니다.
`descriptor_source` 속성은 `message_type`을 검색할 때 참조할 프로토콜 설명자의 소스를 선택합니다. 이는 다음과 같을 수 있습니다:
- 빈 문자열 또는 "local://". 이 경우 프로토콜 설명자는 바이너리에 연결된 C++(Python 아님) proto 정의에 대해 생성됩니다.
- 파일에서 프로토콜 설명자가 생성되는 파일로, 문자열로 직렬화된 `FileDescriptorSet`을 포함해야 합니다. 참고: 프로토콜 컴파일러 `protoc`에 `--descriptor_set_out` 및 `--include_imports` 옵션을 사용하여 `descriptor_source` 파일을 빌드할 수 있습니다.
- "바이트://
중첩 클래스
수업 | DecodeProto.Options | DecodeProto 의 선택적 속성 |
공개 방법
정적 DecodeProto | |
정적 DecodeProto.Options | descriptorSource (문자열 설명자 소스) |
정적 DecodeProto.Options | messageFormat (문자열 메시지 형식) |
정적 DecodeProto.Options | 위생 처리 (부울 위생 처리) |
출력 <정수> | 크기 () 형태가 `[batch_shape, len(field_names)]`인 int32의 텐서. |
목록< 출력 <?>> | 값 () 해당 필드의 값을 포함하는 텐서 목록입니다. |
상속된 메서드
공개 방법
공개 정적 DecodeProto 생성 ( 범위 범위, 피연산자 <String> 바이트, 문자열 messageType, List<String> fieldNames, List<Class<?>> 출력 유형, 옵션... 옵션)
새로운 DecodeProto 작업을 래핑하는 클래스를 생성하는 팩토리 메서드입니다.
매개변수
범위 | 현재 범위 |
---|---|
바이트 | `batch_shape` 형태를 갖는 직렬화된 proto의 텐서입니다. |
메시지 유형 | 디코딩할 프로토 메시지 유형의 이름입니다. |
필드 이름 | proto 필드 이름이 포함된 문자열 목록입니다. 확장 필드는 전체 이름(예: EXT_PACKAGE.EXT_FIELD_NAME)을 사용하여 디코딩할 수 있습니다. |
출력 유형 | field_names의 해당 필드에 사용할 TF 유형 목록입니다. |
옵션 | 선택적 속성 값을 전달합니다. |
보고
- DecodeProto의 새로운 인스턴스
공개 정적 DecodeProto.Options descriptorSource (문자열 설명자 소스)
매개변수
설명자 소스 | 특수 값 `local://` 또는 직렬화된 `FileDescriptorSet`을 포함하는 파일 경로입니다. |
---|
공개 출력 <Integer> 크기 ()
형태가 `[batch_shape, len(field_names)]`인 int32의 텐서. 각 항목은 해당 필드에 대해 발견된 값의 수입니다. 선택 필드에는 0 또는 1개의 값이 있을 수 있습니다.
공개 목록< 출력 <?>> 값 ()
해당 필드의 값을 포함하는 텐서 목록입니다. `values[i]`에는 `output_types[i]` 데이터 유형과 `[batch_shape, max(sizes[...,i])]` 형태가 있습니다.