第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

無法將重復(fù)的 protobuf 對象保存到文件 (Python)

無法將重復(fù)的 protobuf 對象保存到文件 (Python)

大話西游666 2023-03-30 16:54:14
我是 protobuf 的新手,所以我不知道如何正確地提出問題。無論如何,我正在使用這個(gè)模型配置原型文件。我使用Protocol Buffer pageprotoc -I=. --python_out=. ./model_server_config.proto中的這個(gè)命令將它轉(zhuǎn)換成 python ?,F(xiàn)在我有一些可以導(dǎo)入和處理的 python 文件。我的目標(biāo)是創(chuàng)建一個(gè)文件(用于運(yùn)行具有多個(gè)模型的 TensorFlow 模型服務(wù)器),該文件應(yīng)如下所示:model_config_list: { config: {    name: "name1",    base_path: "path1",    model_platform: "tensorflow"  },  config: {    name: "name2",    base_path: "path2",    model_platform: "tensorflow"  },  config: {    name: "name3",    base_path: "path3",    model_platform: "tensorflow"  },}現(xiàn)在使用編譯的 python 包,我制作了一個(gè) protobuf 對象,當(dāng)我打印出來時(shí)它看起來像這樣:model_config_list {  config {    name: "name1"    base_path: "path1"    model_platform: "tensorflow"  }  config {    name: "name2"    base_path: "path2"    model_platform: "tensorflow"  }  config {    name: "name3"    base_path: "path3"    model_platform: "tensorflow"  }}但是在使用序列化對象時(shí)objectname.SerializeToString(),我得到一個(gè)奇怪的輸出:b'\n\x94\x01\n \n\x04name1\x12\x0cpath1"\ntensorflow\n7\n\x08name2\x12\x1fpath2"\ntensorflow\n7\n\x08name3\x12\x1fpath3"\ntensorflow'我嘗試使用 python 的 protobuf 將它轉(zhuǎn)換為 Json,如下所示:from google.protobuf.json_format import MessageToJsonMessageToJson(objectname)這給了我這樣的結(jié)果:{  "modelConfigList": {    "config": [      {        "name": "name1",        "basePath": "path1",        "modelPlatform": "tensorflow"      },      {        "name": "name2",        "basePath": "path2",        "modelPlatform": "tensorflow"      },      {        "name": "name3",        "basePath": "path3",        "modelPlatform": "tensorflow"      }    ]  }}列表中的所有對象和每個(gè)對象都是字符串,這對于 TensorFlow 模型服務(wù)器配置來說是不可接受的。關(guān)于如何將其正確寫入文件的任何想法?還是我錯(cuò)誤地創(chuàng)建了整個(gè)對象?歡迎任何幫助,在此先感謝。
查看完整描述

1 回答

?
慕妹3146593

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊

我不知道什么系統(tǒng)將讀取你的文件,所以我不能說你應(yīng)該如何將它寫入文件。這實(shí)際上取決于模型服務(wù)器期望如何讀取它。

也就是說,我沒有發(fā)現(xiàn)您創(chuàng)建消息的方式或您展示的任何序列化方法有任何問題。

  • print方法顯示了一個(gè)“文本格式”proto,有利于調(diào)試,有時(shí)用于存儲配置文件。它不是很緊湊(字段名稱存在于文件中)并且不具有二進(jìn)制表示的所有向后和向前兼容的功能。它實(shí)際上在功能上與您所說的“應(yīng)該看起來像”相同:冒號和逗號實(shí)際上是可選的。

  • SerializeToString()方法使用二進(jìn)制序列化格式。這可以說是 Protocol Buffers 的構(gòu)建目的。它是一種緊湊的表示形式,并提供向后和向前的兼容性,但人類可讀性不高。

  • 顧名思義,該json_format模塊提供消息的 JSON 表示形式。如果您正在與之交互的系統(tǒng)需要 JSON,那就太好了,但這并不常見。

附錄:不使用print(),該google.protobuf.text_format模塊具有更適合以編程方式使用文本格式的實(shí)用程序。要寫入文件,您可以使用:

from google.protobuf import text_format

(...)

with open(file_path, 'w') as output:

? text_format.PrintMessage(my_message, output)


查看完整回答
反對 回復(fù) 2023-03-30
  • 1 回答
  • 0 關(guān)注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號