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

pytorch模型轉onnx模型的方法詳解

 更新時間:2022年08月30日 11:55:40   作者:掙扎的笨鳥  
很多時候有pytorch模型轉onnx模型的必要,比如用tensorRT加速的時候,下面這篇文章主要給大家介紹了關于pytorch模型轉onnx模型的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

學習目標

1.掌握pytorch模型轉換到onnx模型

2.順利運行onnx模型

3.比對onnx模型和pytorch模型的輸出結果

學習大綱

  • pytorch模型轉換onnx模型
  • 運行onnx模型
  • onnx模型輸出與pytorch模型比對

學習內容

前提條件:需要安裝onnx 和 onnxruntime,可以通過 pip install onnx 和 pip install onnxruntime 進行安裝

1 . pytorch 轉 onnx

pytorch 轉 onnx 只需要一個函數 torch.onnx.export

torch.onnx.export(model, args, path, export_params, verbose, input_names, output_names, do_constant_folding, dynamic_axes, opset_version)

參數說明:

  • model——需要導出的pytorch模型
  • args——模型的輸入參數,滿足輸入層的shape正確即可。
  • path——輸出的onnx模型的位置。例如‘yolov5.onnx’。
  • export_params——輸出模型是否可訓練。default=True,表示導出trained model,否則untrained。
  • verbose——是否打印模型轉換信息。default=False。
  • input_names——輸入節(jié)點名稱。default=None。
  • output_names——輸出節(jié)點名稱。default=None。
  • do_constant_folding——是否使用常量折疊(不了解),默認即可。default=True。
  • dynamic_axes——模型的輸入輸出有時是可變的,如Rnn,或者輸出圖像的batch可變,可通過該參數設置。如輸入層的shape為(b,3,h,w),batch,height,width是可變的,但是chancel是固定三通道。
    格式如下 :
    1)僅list(int) dynamic_axes={‘input’:[0,2,3],‘output’:[0,1]}
    2)僅dict<int, string> dynamic_axes={‘input’:{0:‘batch’,2:‘height’,3:‘width’},‘output’:{0:‘batch’,1:‘c’}}
    3)mixed dynamic_axes={‘input’:{0:‘batch’,2:‘height’,3:‘width’},‘output’:[0,1]}
  • opset_version——opset的版本,低版本不支持upsample等操作。
import torch
import torch.nn
import onnx

model = torch.load('best.pt')
model.eval()

input_names = ['input']
output_names = ['output']

x = torch.randn(1,3,32,32,requires_grad=True)

torch.onnx.export(model, x, 'best.onnx', input_names=input_names, output_names=output_names, verbose='True')

2 . 運行onnx模型

檢查onnx模型,并使用onnxruntime運行。

import onnx
import onnxruntime as ort

model = onnx.load('best.onnx')
onnx.checker.check_model(model)

session = ort.InferenceSession('best.onnx')
x=np.random.randn(1,3,32,32).astype(np.float32)  # 注意輸入type一定要np.float32!!!!!
# x= torch.randn(batch_size,chancel,h,w)


outputs = session.run(None,input = { 'input' : x })

參數說明:

  • output_names: default=None
    用來指定輸出哪些,以及順序
    若為None,則按序輸出所有的output,即返回[output_0,output_1]
    若為[‘output_1’,‘output_0’],則返回[output_1,output_0]
    若為[‘output_0’],則僅返回[output_0:tensor]
  • input:dict
    可以通過session.get_inputs().name獲得名稱
    其中key值要求與torch.onnx.export中設定的一致

3.onnx模型輸出與pytorch模型比對

import numpy as np
np.testing.assert_allclose(torch_result[0].detach().numpu(),onnx_result,rtol=0.0001)

如前所述,經驗表明,ONNX 模型的運行效率明顯優(yōu)于原 PyTorch 模型,這似乎是源于 ONNX 模型生成過程中的優(yōu)化,這也導致了模型的生成過程比較耗時,但整體效率依舊可觀。

此外,根據對 ONNX 模型和 PyTorch 模型運行結果的統計分析(誤差的均值和標準差),可以看出 ONNX 模型的運行結果誤差很小、基本可靠。

內容參考:https://zhuanlan.zhihu.com/p/422290231

總結

到此這篇關于pytorch模型轉onnx模型的文章就介紹到這了,更多相關pytorch模型轉onnx模型內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python計算波峰波谷值的方法(極值點)

    python計算波峰波谷值的方法(極值點)

    這篇文章主要介紹了python求極值點(波峰波谷)求極值點主要用到了scipy庫,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • python list等分并從等分的子集中隨機選取一個數

    python list等分并從等分的子集中隨機選取一個數

    這篇文章主要介紹了python list等分并從等分的子集中隨機選取一個數,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Python交互式圖形編程的實現

    Python交互式圖形編程的實現

    這篇文章主要介紹了Python交互式圖形編程的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python利用matplotlib實現繪制密度散點圖

    Python利用matplotlib實現繪制密度散點圖

    這篇文章主要介紹了如何基于Python語言的matplotlib模塊,對Excel表格文件中的指定數據加以密度散點圖繪制的方法,有需要的小伙伴可以參考下
    2024-04-04
  • Python 保持登錄狀態(tài)進行接口測試的方法示例

    Python 保持登錄狀態(tài)進行接口測試的方法示例

    這篇文章主要介紹了Python 保持登錄狀態(tài)進行接口測試的方法示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-08-08
  • 一篇文章帶你入門Python正則表達式

    一篇文章帶你入門Python正則表達式

    這篇文章主要介紹了Python中正則表達式的詳細教程,正則表達式是Python學習進階當中的重要內容,需要的朋友可以參考下
    2021-10-10
  • 淺析Python3 pip換源問題

    淺析Python3 pip換源問題

    這篇文章主要介紹了Python3 pip換源問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • 對python的輸出和輸出格式詳解

    對python的輸出和輸出格式詳解

    今天小編就為大家分享一篇對python的輸出和輸出格式詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 使用Python可設置抽獎者權重的抽獎腳本代碼

    使用Python可設置抽獎者權重的抽獎腳本代碼

    這篇文章主要介紹了Python可設置抽獎者權重的抽獎腳本,抽獎系統包含可給不同抽獎者設置不同的權重,先從價值高的獎品開始抽,已經中獎的人,不再參與后續(xù)的抽獎,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • python將天數轉換為日期字符串的方法實例

    python將天數轉換為日期字符串的方法實例

    這篇文章主要給大家介紹了關于python將天數轉換為日期字符串的相關資料,以及將將字符串的時間轉換為時間戳的實例代碼,需要的朋友可以參考下
    2022-01-01

最新評論

湘乡市| 东辽县| 当阳市| 靖州| 仙游县| 乌兰浩特市| 白河县| 延边| 额济纳旗| 孝昌县| 鹤壁市| 安化县| 会昌县| 威信县| 深州市| 繁昌县| 芜湖市| 同仁县| 凯里市| 岳阳市| 连江县| 邓州市| 乌兰县| 恩平市| 万宁市| 清河县| 文昌市| 鲁山县| 西林县| 砀山县| 林甸县| 新和县| 霸州市| 鄂温| 军事| 澄城县| 新乡市| 瓦房店市| 金坛市| 东平县| 巨野县|