最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?torch.onnx.export用法詳細(xì)介紹

 更新時(shí)間:2022年07月22日 09:26:50   作者:Kmaeii  
這篇文章主要給大家介紹了關(guān)于Python?torch.onnx.export用法詳細(xì)介紹的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

函數(shù)原型

參數(shù)介紹

mode (torch.nn.Module, torch.jit.ScriptModule or torch.jit.ScriptFunction)

需要轉(zhuǎn)換的模型,支持的模型類(lèi)型有:torch.nn.Module, torch.jit.ScriptModule or torch.jit.ScriptFunction

args (tuple or torch.Tensor)

args可以被設(shè)置成三種形式

1.一個(gè)tuple

args = (x, y, z)

這個(gè)tuple應(yīng)該與模型的輸入相對(duì)應(yīng),任何非Tensor的輸入都會(huì)被硬編碼入onnx模型,所有Tensor類(lèi)型的參數(shù)會(huì)被當(dāng)做onnx模型的輸入。

2.一個(gè)Tensor

args = torch.Tensor([1, 2, 3])

一般這種情況下模型只有一個(gè)輸入

3.一個(gè)帶有字典的tuple

args = (x,
        {'y': input_y,
         'z': input_z})

這種情況下,所有字典之前的參數(shù)會(huì)被當(dāng)做“非關(guān)鍵字”參數(shù)傳入網(wǎng)絡(luò),字典種的鍵值對(duì)會(huì)被當(dāng)做關(guān)鍵字參數(shù)傳入網(wǎng)絡(luò)。如果網(wǎng)絡(luò)中的關(guān)鍵字參數(shù)未出現(xiàn)在此字典中,將會(huì)使用默認(rèn)值,如果沒(méi)有設(shè)定默認(rèn)值,則會(huì)被指定為None。

NOTE:

一個(gè)特殊情況,當(dāng)網(wǎng)絡(luò)本身最后一個(gè)參數(shù)為字典時(shí),直接在tuple最后寫(xiě)一個(gè)字典則會(huì)被誤認(rèn)為關(guān)鍵字傳參。所以,可以通過(guò)在tuple最后添加一個(gè)空字典來(lái)解決。

#錯(cuò)誤寫(xiě)法:
 
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")

f

一個(gè)文件類(lèi)對(duì)象或一個(gè)路徑字符串,二進(jìn)制的protocol buffer將被寫(xiě)入此文件

export_params (bool, default True)

如果為T(mén)rue則導(dǎo)出模型的參數(shù)。如果想導(dǎo)出一個(gè)未訓(xùn)練的模型,則設(shè)為False

verbose (bool, default False)

如果為T(mén)rue,則打印一些轉(zhuǎn)換日志,并且onnx模型中會(huì)包含doc_string信息。

training (enum, default TrainingMode.EVAL)

枚舉類(lèi)型包括:

TrainingMode.EVAL - 以推理模式導(dǎo)出模型。

TrainingMode.PRESERVE - 如果model.training為False,則以推理模式導(dǎo)出;否則以訓(xùn)練模式導(dǎo)出。

TrainingMode.TRAINING - 以訓(xùn)練模式導(dǎo)出,此模式將禁止一些影響訓(xùn)練的優(yōu)化操作。

input_names (list of str, default empty list)

按順序分配給onnx圖的輸入節(jié)點(diǎn)的名稱(chēng)列表。

output_names (list of str, default empty list)

按順序分配給onnx圖的輸出節(jié)點(diǎn)的名稱(chēng)列表。

operator_export_type (enum, default None)

默認(rèn)為OperatorExportTypes.ONNX, 如果Pytorch built with DPYTORCH_ONNX_CAFFE2_BUNDLE,則默認(rèn)為OperatorExportTypes.ONNX_ATEN_FALLBACK。

枚舉類(lèi)型包括:

OperatorExportTypes.ONNX - 將所有操作導(dǎo)出為ONNX操作。

OperatorExportTypes.ONNX_FALLTHROUGH - 試圖將所有操作導(dǎo)出為ONNX操作,但碰到無(wú)法轉(zhuǎn)換的操作(如onnx未實(shí)現(xiàn)的操作),則將操作導(dǎo)出為“自定義操作”,為了使導(dǎo)出的模型可用,運(yùn)行時(shí)必須支持這些自定義操作。支持自定義操作方法見(jiàn)鏈接。

OperatorExportTypes.ONNX_ATEN - 所有ATen操作導(dǎo)出為ATen操作,ATen是Pytorch的內(nèi)建tensor庫(kù),所以這將使得模型直接使用Pytorch實(shí)現(xiàn)。(此方法轉(zhuǎn)換的模型只能被Caffe2直接使用)

OperatorExportTypes.ONNX_ATEN_FALLBACK - 試圖將所有的ATen操作也轉(zhuǎn)換為ONNX操作,如果無(wú)法轉(zhuǎn)換則轉(zhuǎn)換為ATen操作(此方法轉(zhuǎn)換的模型只能被Caffe2直接使用)。例如:

# 轉(zhuǎn)換前:
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)
 
 
# 轉(zhuǎn)換后:
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)

opset_version (int, default 9)

默認(rèn)是9。值必須等于_onnx_main_opset或在_onnx_stable_opsets之內(nèi)。具體可在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

do_constant_folding (bool, default False)

是否使用“常量折疊”優(yōu)化。常量折疊將使用一些算好的常量來(lái)優(yōu)化一些輸入全為常量的節(jié)點(diǎn)。

example_outputs (T or a tuple of T, where T is Tensor or convertible to Tensor, default None)

當(dāng)需輸入模型為ScriptModule 或 ScriptFunction時(shí)必須提供。此參數(shù)用于確定輸出的類(lèi)型和形狀,而不跟蹤(tracing )模型的執(zhí)行。

dynamic_axes (dict<string, dict<python:int, string>> or dict<string, list(int)>, default empty dict)

通過(guò)以下規(guī)則設(shè)置動(dòng)態(tài)的維度:

KEY(str) - 必須是input_names或output_names指定的名稱(chēng),用來(lái)指定哪個(gè)變量需要使用到動(dòng)態(tài)尺寸。

VALUE(dict or list) - 如果是一個(gè)dict,dict中的key是變量的某個(gè)維度,dict中的value是我們給這個(gè)維度取的名稱(chēng)。如果是一個(gè)list,則list中的元素都表示此變量的某個(gè)維度。

具體可參考如下示例:

class SumModule(torch.nn.Module):
    def forward(self, x):
        return torch.sum(x, dim=1)
 
# 以動(dòng)態(tài)尺寸模式導(dǎo)出模型
 
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],
                  })
 
### 導(dǎo)出后的節(jié)點(diǎn)信息
 
##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
...
 

keep_initializers_as_inputs (bool, default None)

NONE

custom_opsets (dict<str, int>, default empty dict)

NONE

Torch.onnx.export執(zhí)行流程:

1、如果輸入到torch.onnx.export的模型是nn.Module類(lèi)型,則默認(rèn)會(huì)將模型使用torch.jit.trace轉(zhuǎn)換為ScriptModule

2、使用args參數(shù)和torch.jit.trace將模型轉(zhuǎn)換為ScriptModule,torch.jit.trace不能處理模型中的循環(huán)和if語(yǔ)句

3、如果模型中存在循環(huán)或者if語(yǔ)句,在執(zhí)行torch.onnx.export之前先使用torch.jit.script將nn.Module轉(zhuǎn)換為ScriptModule

4、模型轉(zhuǎn)換成onnx之后,預(yù)測(cè)結(jié)果與之前會(huì)有稍微的差別,這些差別往往不會(huì)改變模型的預(yù)測(cè)結(jié)果,比如預(yù)測(cè)的概率在小數(shù)點(diǎn)之后五六位有差別。

總結(jié)

到此這篇關(guān)于Python torch.onnx.export用法詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Python torch.onnx.export用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于python做一個(gè)2048小游戲

    基于python做一個(gè)2048小游戲

    2048的邏輯無(wú)非是操作4*4的方格,每個(gè)方格中有一個(gè)數(shù),這些數(shù)可以移動(dòng),如果兩個(gè)相同的數(shù)字在移動(dòng)時(shí)相撞了,就可以彼此合并,本文將給大家介紹如何基于python做一個(gè)2048小游戲,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-01-01
  • Python基礎(chǔ)中的的if-else語(yǔ)句詳解

    Python基礎(chǔ)中的的if-else語(yǔ)句詳解

    這篇文章主要為大家詳細(xì)介紹了Python基礎(chǔ)中的的if-else語(yǔ)句,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • 使用Python實(shí)現(xiàn)視頻拼接效果

    使用Python實(shí)現(xiàn)視頻拼接效果

    這篇文章主要為大家詳細(xì)介紹了使用Python實(shí)現(xiàn)視頻拼接效果的兩種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • Python輸入二維數(shù)組方法

    Python輸入二維數(shù)組方法

    下面小編就為大家分享一篇Python輸入二維數(shù)組方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 如何利用Python保留指定位數(shù)的小數(shù)

    如何利用Python保留指定位數(shù)的小數(shù)

    這篇文章主要給大家介紹了關(guān)于如何利用Python保留指定位數(shù)的小數(shù),,代碼簡(jiǎn)單易懂,非常不錯(cuò),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Python分析學(xué)校四六級(jí)過(guò)關(guān)情況

    Python分析學(xué)校四六級(jí)過(guò)關(guān)情況

    這篇文章主要為大家詳細(xì)介紹了利用Python分析學(xué)校四六級(jí)過(guò)關(guān)情況,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Python反射用法實(shí)例簡(jiǎn)析

    Python反射用法實(shí)例簡(jiǎn)析

    這篇文章主要介紹了Python反射用法,結(jié)合實(shí)例形式簡(jiǎn)單分析了Python反射的概念、原理及使用方法,需要的朋友可以參考下
    2017-12-12
  • 詳解如何用Python實(shí)現(xiàn)感知器算法

    詳解如何用Python實(shí)現(xiàn)感知器算法

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著如何用Python實(shí)現(xiàn)感知器算法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 刪除pandas中產(chǎn)生Unnamed:0列的操作

    刪除pandas中產(chǎn)生Unnamed:0列的操作

    這篇文章主要介紹了刪除pandas中產(chǎn)生Unnamed:0列的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Pygame游戲開(kāi)發(fā)之太空射擊實(shí)戰(zhàn)添加圖形篇

    Pygame游戲開(kāi)發(fā)之太空射擊實(shí)戰(zhàn)添加圖形篇

    相信大多數(shù)8090后都玩過(guò)太空射擊游戲,在過(guò)去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來(lái)自己動(dòng)手實(shí)現(xiàn)它,在編寫(xiě)學(xué)習(xí)中回顧過(guò)往展望未來(lái),在本課中,我們將討論如何在游戲中使用預(yù)先繪制的圖形
    2022-08-08

最新評(píng)論

托克逊县| 宣汉县| 泸定县| 尉犁县| 崇礼县| 海伦市| 弥渡县| 大安市| 犍为县| 南宫市| 益阳市| 筠连县| 西畴县| 高碑店市| 都江堰市| 电白县| 奇台县| 上虞市| 瓦房店市| 绥棱县| 正定县| 耒阳市| 博兴县| 吉水县| 齐河县| 富锦市| 东乌珠穆沁旗| 凌海市| 马龙县| 南漳县| 屏边| 榕江县| 青冈县| 盐亭县| 马边| 晋江市| 敦化市| 杂多县| 闸北区| 宜章县| 化州市|