日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

开放式神经网络交换-ONNX(上)

發布時間:2023/11/28 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开放式神经网络交换-ONNX(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開放式神經網絡交換-ONNX(上)

目的

本文檔包含ONNX語義的規范性規范。

“onnx”文件夾下的.proto和.proto3文件構成了用協議緩沖區定義語言編寫的語法規范。.proto和.proto3文件中的注釋目的是提高這些文件的可讀性,但如果它們與本文檔沖突,則不具有規范性。此類沖突應報告為文檔錯誤。

模型驗證說明

有一個工具可以根據此規范執行模型的一般驗證。它在C++中用Python命令行package實現。

本文件及所有相關文件中的語言說明:

在本文件中使用SHOULD、MUST、MAY等與RFC 2119一致。

“list”的使用應表示項目的有序集合,“set”應表示唯一元素的無序集合,“bag”表示可能非唯一元素的無序集合。

Components

ONNX is an open specification that consists of the
following components:

A definition of an extensible computation graph model. Definitions of standard data types.
Definitions of built-in operators.

其中#1和#2包含在本文中;內置操作器在本文檔末尾列出的文檔中單獨介紹。具體來說,內置算子operator被劃分為一組原始算子operator和函數。函數是一種算子operator,其語義通過使用其他算子operator(和函數)擴展到子圖(稱為函數體)中來正式表示。就功能而言,與ONNX兼容的框架或運行時可以內聯函數來執行它,如果它沒有相應的函數實現。

有兩個官方的ONNX變體;兩者之間的主要區別在于支持的類型和默認的算子operator集。只有神經網絡的ONNX變體只識別張量作為輸入和輸出類型,而經典的機器學習擴展ONNX-ML也識別序列和映射。ONNX-ML用非神經網絡的ML算法擴展了ONNX算子集。

直到IR版本6,ONNX規范和模型格式只處理推理(也稱為評分)。從IR版本7開始,ONNX規范和模型格式已擴展到支持訓練。ONNX訓練模型本身是推理模型的一個擴展,允許只進行推理的runtime忽略與訓練相關的擴展并運行推理。然而,在典型的使用場景中,與訓練模型相比,僅推理模型可以實現更優化的模型表示(用于推理目的)。

runtime不可知

ONNX并不預先假設或暗示任何特定的運行時實現方法。

例如,一個實現可以由一個解釋模型的富運行時組成;

可以是一個代碼生成器,它將整個模型轉換為某些目標編程語言的可執行代碼;

可以是硬件實現;

可以是其中兩個或三個的組合。

本規范中的任何內容都不應被解釋為主張一種實現方法勝過任何其他方法;

對具體實現的內部工作原理的任何評論都應解釋為示例。

ONNX版本控制

ONNX中有幾個地方有版本控制功能——IR(中間表示)規范本身、模型版本和算子operator集版本。此外,每一個單獨的算子operator都指明它是在哪個版本的包含算子operator集中引入或穩定的。

版本號可以用作簡單的數字,也可以用于對語義版本進行編碼。如果使用semver,慣例是使用兩個最高有效字節作為主要編號,下兩個字節用于次要編號,最低有效的四個字節用于構建/錯誤修復build/bugfix編號。使用semver版本控制時,至少有一個主/輔編號必須為非零。

IR規范對其版本使用簡單的單調遞增數。有效的IR版本由枚舉定義,該枚舉當前具有以下值:

// Version 1, published on Oct 10, 2017.

IR_VERSION_2017_10_10 =0x0000000000000001;

// Version 2, published on Oct 30,2017

IR_VERSION_2017_10_30 =0x0000000000000002;

// Version 3 published on Nov 3, 2017

IR_VERSION = 0x0000000000000003;

算子operator集使用簡單的版本號。每個算子operator集版本表示算子operator集及其在特定時間點的語義的快照。

本規范沒有提供關于模型生產者應該使用什么版本控制方案的指導。

有關IR、算子operator集和模型版本控制的約定和最佳實踐的更多詳細信息,請參閱版本控制。
可擴展計算圖模型

ONNX指定計算圖的可移植、序列化格式。它不一定是框架選擇的在內部使用和操作計算的形式。例如,如果在優化過程中操作更有效,則實現可能在內存中以不同的方式表示模型。

一個實現可以通過添加表示語義的算子operator來擴展ONNX,這些算子operator超出了所有實現必須支持的標準算子operator集。其機制是將算子operator集添加到依賴于擴展算子operator的模型中的opset_import屬性。

模型Models

頂層ONNX構造是一個“Model”,在協議緩沖區中表示為類型onnx.ModelProto

模型結構的主要目的是將元數據與包含所有可執行元素的圖形相關聯。元數據是在第一次讀取模型文件時使用的,它為實現提供了所需的信息,以確定它是否能夠執行模型、生成日志消息、錯誤報告等。此外,元數據對工具(如IDE和模型庫)很有用,它需要它來告訴人類一個給定模型的目的和特性。

每個模型都有以下組件:

模型必須指定一個域,并根據負責組織的標識使用反向域名,這與傳統上用于命名Java包的約定相同。

注意:檢測ONNX文件

可以使用協議緩沖區分發中的Protocol工具檢查ONNX文件的內容,方法如下:

$ protoc
–decode=onnx.ModelProto onnx.proto < yourfile.onnx

Where onnx.proto is the file
that is part of this repository.

Alternatively, you can use a tool like Netron
to explore the ONNX file.

模型語義

推理模型的語義是一個無狀態函數(除了用于隨機數生成的狀態)。因此,每當一個推理模型(沒有隨機的生成器操作)被用于對同一輸入執行推理時,它都會產生相同的輸出。

訓練模型的語義是有狀態對象的語義,狀態由訓練權重的當前值組成(以及學習算法所需的任何其他輔助狀態,例如動量)。具體地說,它的語義是通過三種方法獲取的:初始化方法(用于初始化或重置狀態變量的值)、訓練步驟方法(使用一批輸入輸出對進行訓練)和一種推理方法,該方法利用學習到的權重的當前值進行推理。前兩個方法更新對象的狀態,而第三個方法沒有副作用。

可選元數據

模型中的“metadata_props”字段可用于工具或模型開發人員選擇放置在其中的任何類型的可選元數據。以下是定義的模型的“標準”可選元數據屬性。

算子operator

每個模型都必須顯式地命名其功能所依賴的算子operator。算子operator定義可用算子operator及其版本。每個模型按其域定義導入的算子operator。所有模型都隱式導入默認的ONNX算子operator。

每個算子operator應在單獨的文檔中定義,并使用protobuf作為序列化格式。如何在運行時找到算子operator文檔取決于實現。

注:截至本文檔的發布,還沒有任何ONNX實現用于處理操作文檔。

算子operator的屬性包括:

算子operator版本是一個簡單的整數值,隨著新版本的算子operator的發布,該值單調增加。

默認算子operator以外的算子operator必須指定其域,并應根據負責組織的標識使用反向域名,這與用于命名Java包的約定相同。

算子operator

圖中使用的每個算子operator必須由模型導入的算子operator之一顯式聲明。

算子operator定義的屬性包括:

版本值必須與首次發布算子operator時的算子operator版本值相同。算子operator的后續版本一旦發布為穩定版本,則不得更改算子operator的簽名或語義。

“status”屬性指示算子operator的語法、語義或存在是否處于實驗階段或穩定階段。一旦一個算子operator被發布為穩定的,它的語法和語義在算子operator集的后續版本中就不能改變。

有兩種不同的方法將信息傳遞給算子operator–輸入和屬性。后者用于表示圖中常量的值,而前者表示圖形輸入或在圖中其他地方計算的值。這種區別可能與某些實現的良好性能密切相關,而與其他實現完全無關。 圖

圖用于描述無副作用的計算(函數)。序列化圖由一組元數據字段、一組模型參數和一組計算節點組成。

每一個計算數據流圖都被構造成一個拓撲排序的節點列表,這些節點必須沒有循環。每個節點表示對算子operator的調用。每個節點有零個或多個輸入和一個或多個輸出。

圖形具有以下屬性:

ValueInfo has the following properties:

版本值必須與首次發布算子operator時的算子operator版本值相同。

算子operator的后續版本一旦發布為穩定版本,則不得更改算子operator的簽名或語義。

“status”屬性指示算子operator的語法、語義或存在是否處于實驗階段或穩定階段。一旦一個算子operator被發布為穩定的,它的語法和語義在算子operator的后續版本中就不能改變。

有兩種不同的方法將信息傳遞給算子operator–輸入和屬性。后者用于表示圖中常量的值,而前者表示圖形輸入或在圖中其他地方計算的值。這種區別可能與某些實現的良好性能密切相關,而與其他實現完全無關。

圖用于描述無副作用的計算(函數)。序列化圖由一組元數據字段、一組模型參數和一組計算節點組成。

每一個計算數據流圖都被構造成一個拓撲排序的節點列表,這些節點必須沒有循環。每個節點表示對算子operator的調用。每個節點有零個或多個輸入和一個或多個輸出。

圖形具有以下屬性:

總結

以上是生活随笔為你收集整理的开放式神经网络交换-ONNX(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。