<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
需要轉換的模型,支援的模型型別有:torch.nn.Module, torch.jit.ScriptModule or torch.jit.ScriptFunction
args可以被設定成三種形式
1.一個tuple
args = (x, y, z)
這個tuple應該與模型的輸入相對應,任何非Tensor的輸入都會被寫死入onnx模型,所有Tensor型別的引數會被當做onnx模型的輸入。
2.一個Tensor
args = torch.Tensor([1, 2, 3])
一般這種情況下模型只有一個輸入
3.一個帶有字典的tuple
args = (x, {'y': input_y, 'z': input_z})
這種情況下,所有字典之前的引數會被當做“非關鍵字”引數傳入網路,字典種的鍵值對會被當做關鍵字引數傳入網路。如果網路中的關鍵字引數未出現在此字典中,將會使用預設值,如果沒有設定預設值,則會被指定為None。
NOTE:
一個特殊情況,當網路本身最後一個引數為字典時,直接在tuple最後寫一個字典則會被誤認為關鍵字傳參。所以,可以通過在tuple最後新增一個空字典來解決。
#錯誤寫法: torch.onnx.export( model, (x, # WRONG: will be interpreted as named arguments {y: z}), "test.onnx.pb") # 糾正 torch.onnx.export( model, (x, {y: z}, {}), "test.onnx.pb")
一個檔案類物件或一個路徑字串,二進位制的protocol buffer將被寫入此檔案
如果為True則匯出模型的引數。如果想匯出一個未訓練的模型,則設為False
如果為True,則列印一些轉換紀錄檔,並且onnx模型中會包含doc_string資訊。
列舉型別包括:
TrainingMode.EVAL - 以推理模式匯出模型。
TrainingMode.PRESERVE - 如果model.training為False,則以推理模式匯出;否則以訓練模式匯出。
TrainingMode.TRAINING - 以訓練模式匯出,此模式將禁止一些影響訓練的優化操作。
按順序分配給onnx圖的輸入節點的名稱列表。
按順序分配給onnx圖的輸出節點的名稱列表。
預設為OperatorExportTypes.ONNX, 如果Pytorch built with DPYTORCH_ONNX_CAFFE2_BUNDLE,則預設為OperatorExportTypes.ONNX_ATEN_FALLBACK。
列舉型別包括:
OperatorExportTypes.ONNX - 將所有操作匯出為ONNX操作。
OperatorExportTypes.ONNX_FALLTHROUGH - 試圖將所有操作匯出為ONNX操作,但碰到無法轉換的操作(如onnx未實現的操作),則將操作匯出為“自定義操作”,為了使匯出的模型可用,執行時必須支援這些自定義操作。支援自定義操作方法見連結。
OperatorExportTypes.ONNX_ATEN - 所有ATen操作匯出為ATen操作,ATen是Pytorch的內建tensor庫,所以這將使得模型直接使用Pytorch實現。(此方法轉換的模型只能被Caffe2直接使用)
OperatorExportTypes.ONNX_ATEN_FALLBACK - 試圖將所有的ATen操作也轉換為ONNX操作,如果無法轉換則轉換為ATen操作(此方法轉換的模型只能被Caffe2直接使用)。例如:
# 轉換前: graph(%0 : Float): %3 : int = prim::Constant[value=0]() # conversion unsupported %4 : Float = aten::triu(%0, %3) # conversion supported %5 : Float = aten::mul(%4, %0) return (%5) # 轉換後: graph(%0 : Float): %1 : Long() = onnx::Constant[value={0}]() # not converted %2 : Float = aten::ATen[operator="triu"](%0, %1) # converted %3 : Float = onnx::Mul(%2, %0) return (%3)
預設是9。值必須等於_onnx_main_opset或在_onnx_stable_opsets之內。具體可在torch/onnx/symbolic_helper.py中找到。例如:
_default_onnx_opset_version = 9 _onnx_main_opset = 13 _onnx_stable_opsets = [7, 8, 9, 10, 11, 12] _export_onnx_opset_version = _default_onnx_opset_version
是否使用“常數摺疊”優化。常數摺疊將使用一些算好的常數來優化一些輸入全為常數的節點。
當需輸入模型為ScriptModule 或 ScriptFunction時必須提供。此引數用於確定輸出的型別和形狀,而不跟蹤(tracing )模型的執行。
通過以下規則設定動態的維度:
KEY(str) - 必須是input_names或output_names指定的名稱,用來指定哪個變數需要使用到動態尺寸。
VALUE(dict or list) - 如果是一個dict,dict中的key是變數的某個維度,dict中的value是我們給這個維度取的名稱。如果是一個list,則list中的元素都表示此變數的某個維度。
具體可參考如下範例:
class SumModule(torch.nn.Module): def forward(self, x): return torch.sum(x, dim=1) # 以動態尺寸模式匯出模型 torch.onnx.export(SumModule(), (torch.ones(2, 2),), "onnx.pb", input_names=["x"], output_names=["sum"], dynamic_axes={ # dict value: manually named axes "x": {0: "my_custom_axis_name"}, # list value: automatic names "sum": [0], }) ### 匯出後的節點資訊 ##input input { name: "x" ... shape { dim { dim_param: "my_custom_axis_name" # axis 0 } dim { dim_value: 2 # axis 1 ... ##output output { name: "sum" ... shape { dim { dim_param: "sum_dynamic_axes_1" # axis 0 ...
NONE
NONE
1、如果輸入到torch.onnx.export的模型是nn.Module型別,則預設會將模型使用torch.jit.trace轉換為ScriptModule
2、使用args引數和torch.jit.trace將模型轉換為ScriptModule,torch.jit.trace不能處理模型中的迴圈和if語句
3、如果模型中存在迴圈或者if語句,在執行torch.onnx.export之前先使用torch.jit.script將nn.Module轉換為ScriptModule
4、模型轉換成onnx之後,預測結果與之前會有稍微的差別,這些差別往往不會改變模型的預測結果,比如預測的概率在小數點之後五六位有差別。
到此這篇關於Python torch.onnx.export用法詳細介紹的文章就介紹到這了,更多相關Python torch.onnx.export用法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45