สหกรณ์แยกฟิลด์จากข้อความบัฟเฟอร์โปรโตคอลแบบซีเรียลไลซ์เป็นเทนเซอร์
หมายเหตุ: API นี้ได้รับการออกแบบมาเพื่อความเป็นมุมฉากมากกว่าความเป็นมิตรต่อมนุษย์ สามารถใช้เพื่อแยกวิเคราะห์อินพุตโปรโตสด้วยมือ แต่มีไว้สำหรับใช้ในโค้ดที่สร้างขึ้น
`decode_proto` op จะแยกฟิลด์จากข้อความบัฟเฟอร์โปรโตคอลแบบอนุกรมลงในเทนเซอร์ ช่องใน `field_names` จะถูกถอดรหัสและแปลงเป็น `output_types` ที่สอดคล้องกันหากเป็นไปได้
ต้องระบุชื่อ `message_type` เพื่อให้บริบทสำหรับชื่อฟิลด์ คุณสามารถค้นหาตัวอธิบายข้อความจริงได้ในพูลตัวอธิบายที่เชื่อมโยงหรือชื่อไฟล์ที่ผู้โทรให้ไว้โดยใช้แอตทริบิวต์ `descriptor_source`
เทนเซอร์เอาท์พุตแต่ละตัวจะมีเทนเซอร์หนาแน่น ซึ่งหมายความว่ามีการบุนวมเพื่อเก็บองค์ประกอบซ้ำจำนวนมากที่สุดที่เห็นในมินิแบทช์อินพุต (รูปทรงยังบุนวมไว้หนึ่งอันเพื่อป้องกันขนาดเป็นศูนย์) จำนวนการทำซ้ำจริงสำหรับแต่ละตัวอย่างในมินิแบทช์สามารถพบได้ในเอาต์พุต "ขนาด" ในหลายกรณี เอาต์พุตของ `decode_proto` จะถูกป้อนเข้าสู่ tf.squeeze ทันที หากค่าที่หายไปไม่ใช่ปัญหา เมื่อใช้ tf.squeeze ให้ส่งมิติการบีบอย่างชัดเจนเสมอเพื่อหลีกเลี่ยงเรื่องไม่คาดคิด
โดยส่วนใหญ่แล้ว การแมประหว่างประเภทฟิลด์ Proto และประเภท dTensorFlow นั้นตรงไปตรงมา อย่างไรก็ตาม มีกรณีพิเศษบางประการ:
- ฟิลด์โปรโตที่มีข้อความย่อยหรือกลุ่มสามารถแปลงเป็น `DT_STRING` เท่านั้น (ข้อความย่อยที่ต่อเนื่องกัน) นี่เป็นการลดความซับซ้อนของ API สตริงผลลัพธ์สามารถใช้เป็นอินพุตไปยังอินสแตนซ์อื่นของ decode_proto op
- TensorFlow ขาดการสนับสนุนจำนวนเต็มที่ไม่ได้ลงนาม ops แสดงถึงประเภท uint64 เป็น `DT_INT64` โดยมีรูปแบบบิตเสริมสองส่วนเหมือนกัน (วิธีที่ชัดเจน) ค่า int32 ที่ไม่ได้ลงนามสามารถแสดงได้ทุกประการด้วยการระบุประเภท `DT_INT64` หรือใช้ส่วนเสริมสองส่วนหากผู้เรียกระบุ `DT_INT32` ในแอตทริบิวต์ `output_types`
- ช่อง "แผนที่" ไม่ได้ถูกถอดรหัสโดยตรง โดยจะถือเป็นช่อง "ซ้ำ" ของประเภทรายการที่เหมาะสม โปรโตคอมไพเลอร์กำหนดประเภทรายการสำหรับฟิลด์แผนที่แต่ละฟิลด์ ชื่อประเภทคือชื่อฟิลด์ ซึ่งแปลงเป็น "CamelCase" โดยมี "Entry" ต่อท้าย ข้อความ tf.train.Features.FeatureEntry
เป็นตัวอย่างของประเภท 'รายการ' โดยนัยประเภทใดประเภทหนึ่งเหล่านี้
- ช่อง `enum` ควรอ่านเป็น int32
รองรับทั้งอนุกรมไบนารีและโปรโตข้อความ และสามารถเลือกได้โดยใช้แอตทริบิวต์ "รูปแบบ"
แอตทริบิวต์ `descriptor_source` จะเลือกแหล่งที่มาของตัวอธิบายโปรโตคอลเพื่อปรึกษาเมื่อค้นหา `message_type` นี่อาจเป็น:
- สตริงว่างหรือ "local://" ซึ่งในกรณีนี้ตัวอธิบายโปรโตคอลจะถูกสร้างขึ้นสำหรับคำจำกัดความโปรโต C++ (ไม่ใช่ Python) ที่เชื่อมโยงกับไบนารี
- ไฟล์ ซึ่งในกรณีนี้ตัวอธิบายโปรโตคอลจะถูกสร้างขึ้นจากไฟล์ ซึ่งคาดว่าจะมี `FileDescriptorSet` ที่ถูกทำให้เป็นอนุกรมเป็นสตริง หมายเหตุ: คุณสามารถสร้างไฟล์ `descriptor_source` ได้โดยใช้ตัวเลือก `--descriptor_set_out` และ `--include_imports` ไปยังคอมไพเลอร์โปรโตคอล `protoc`
- A "ไบต์: //
คลาสที่ซ้อนกัน
ระดับ | ถอดรหัส Proto.Options | แอ็ตทริบิวต์ทางเลือกสำหรับ DecodeProto |
วิธีการสาธารณะ
DecodeProto แบบคงที่ | สร้าง ( ขอบเขตขอบเขต ตัว ถูกดำเนินการ <String> ไบต์ ประเภทข้อความสตริง รายการ<สตริง> ชื่อฟิลด์ รายการ<Class<?>> ประเภทเอาต์พุต ตัวเลือก... ตัวเลือก) วิธีการจากโรงงานเพื่อสร้างคลาสที่รวมการดำเนินการ DecodeProto ใหม่ |
DecodeProto.Options แบบคงที่ | descriptorSource (สตริง descriptorSource) |
DecodeProto.Options แบบคงที่ | messageFormat (รูปแบบข้อความสตริง) |
DecodeProto.Options แบบคงที่ | ฆ่าเชื้อ (ฆ่าเชื้อแบบบูลีน) |
เอาต์พุต <จำนวนเต็ม> | ขนาด () เทนเซอร์ของ int32 ที่มีรูปร่าง `[batch_shape, len(field_names)]` |
รายการ < เอาท์พุต <?>> | ค่า () รายการเทนเซอร์ที่มีค่าสำหรับฟิลด์ที่เกี่ยวข้อง |
วิธีการสืบทอด
วิธีการสาธารณะ
สร้าง DecodeProto แบบคงที่สาธารณะ (ขอบเขต ขอบเขต ตัว ถูกดำเนินการ <สตริง> ไบต์ ประเภทข้อความสตริง รายการ <สตริง> ชื่อฟิลด์ รายการ <คลาส <?>> ประเภทเอาต์พุต ตัวเลือก... ตัวเลือก)
วิธีการจากโรงงานเพื่อสร้างคลาสที่รวมการดำเนินการ DecodeProto ใหม่
พารามิเตอร์
ขอบเขต | ขอบเขตปัจจุบัน |
---|---|
ไบต์ | เทนเซอร์ของโปรโตอนุกรมที่มีรูปร่าง `batch_shape` |
ประเภทข้อความ | ชื่อของประเภทข้อความโปรโตที่จะถอดรหัส |
ชื่อฟิลด์ | รายการสตริงที่มีชื่อฟิลด์โปรโต ฟิลด์ส่วนขยายสามารถถอดรหัสได้โดยใช้ชื่อเต็ม เช่น EXT_PACKAGE.EXT_FIELD_NAME |
ประเภทเอาต์พุต | รายการประเภท TF ที่จะใช้สำหรับฟิลด์ที่เกี่ยวข้องใน field_names |
ตัวเลือก | มีค่าแอตทริบิวต์ทางเลือก |
การส่งคืน
- อินสแตนซ์ใหม่ของ DecodeProto
สาธารณะ DecodeProto.Options descriptorSource แบบคงที่ (สตริง descriptorSource)
พารามิเตอร์
แหล่งที่มาของคำอธิบาย | ค่าพิเศษ `local://` หรือเส้นทางไปยังไฟล์ที่มี `FileDescriptorSet` ที่เป็นอนุกรม |
---|
DecodeProto.Options messageFormat แบบคงที่สาธารณะ (String messageFormat)
พารามิเตอร์
ข้อความรูปแบบ | `ไบนารี่` หรือ text ก็ได้ |
---|
DecodeProto.Options แบบคงที่สาธารณะ ฆ่าเชื้อ (ฆ่าเชื้อบูลีน)
พารามิเตอร์
ฆ่าเชื้อ | ไม่ว่าจะฆ่าเชื้อผลหรือไม่ก็ตาม |
---|
ขนาด เอาต์พุต สาธารณะ <จำนวนเต็ม> ()
เทนเซอร์ของ int32 ที่มีรูปร่าง `[batch_shape, len(field_names)]` แต่ละรายการคือจำนวนค่าที่พบในฟิลด์ที่เกี่ยวข้อง ช่องที่ไม่บังคับอาจมีค่า 0 หรือ 1
รายการสาธารณะ < เอาท์พุต <?>> ค่า ()
รายการเทนเซอร์ที่มีค่าสำหรับฟิลด์ที่เกี่ยวข้อง `values[i]` มีประเภทข้อมูล `output_types[i]` และรูปร่าง `[batch_shape, max(sizes[...,i])]`