統計模型參數量與FLOPs

2021-09-25 01:18:18 字數 1086 閱讀 1796

你的模型到底有多少引數,每秒的浮點運算到底有多少,這些你都知道嗎?近日,github 開源了乙個小工具,它可以統計 pytorch 模型的參數量與每秒浮點運算數(flops)。有了這兩種資訊,模型大小控制也就更合理了。

其實模型的參數量好算,但浮點運算數並不好確定,我們一般也就根據參數量直接估計計算量了。但是像卷積之類的運算,它的參數量比較小,但是運算量非常大,它是一種計算密集型的操作。反觀全連線結構,它的參數量非常多,但運算量並沒有顯得那麼大。

此外,機器學習還有很多結構沒有引數但存在計算,例如最大池化和dropout等。因此,pytorch-opcounter 這種能直接統計 flops 的工具還是非常有吸引力的。

opcouter

pytorch-opcounter 的安裝和使用都非常簡單,並且還能定製化統計規則,因此那些特殊的運算也能自定義地統計進去。

我們可以使用 pip 簡單地完成安裝:pip install thop。不過 github 上的**總是最新的,因此也可以從 github 上的指令碼安裝。

對於 torchvision 中自帶的模型,flops 統計通過以下幾行**就能完成:

我們測試了一下 densenet-121,用 opcouter 統計了參數量與運算量。api 的輸出如下所示,它會告訴我們具體統計了哪些結構,它們的配置又是什麼樣的。

最後輸出的浮點運算數和參數量分別為如下所示,換算一下就能知道 densenet-121 的參數量約有 798 萬,計算量約有 2.91 gflops。

opcouter 是怎麼算的

我們可能會疑惑,opcouter 到底是怎麼統計的浮點運算數。其實它的統計**在專案中也非常可讀,從**上看,目前該工具主要統計了視覺方面的運算,包括各種卷積、啟用函式、池化、批歸一化等。例如最常見的二維卷積運算,它的統計**如下所示:

總體而言,模型會計算每乙個卷積核發生的乘加運算數,再推廣到整個卷積層級的總乘加運算數。

定製你的運算統計

有一些運算統計還沒有加進去,如果我們知道該怎樣算,那麼就可以寫個自定義函式。

最後,作者利用這個工具統計了各種流行視覺模型的參數量與 flops 量:

pytorch 模型參數量 FLOPs統計方法

二 使用函式統計模型參數量 安裝 pip install torchstat torchstat github 原始碼頁面 例子 from torchstat import stat model model stat model,3 1280 1280 輸出 會輸出模型各層網路的資訊,最後進行總結統...

模型參數量與FLOPs計算

深度學習中parameters個數和flops計算 以cnn中經典的alexnet網路結構為例 never giveup的部落格 csdn部落格 大話cnn經典模型 alexnet 雪餅的個人空間 oschina 在計算flops中,有 kernel ops self.kernel size 0 s...

模型引數與模型超引數

模型引數是模型內部的配置變數,其值可以根據資料進行估計。模型在進行 時需要它們。它們的值定義了可使用的模型。他們是從資料估計或獲悉的。它們通常不由程式設計者手動設定。他們通常被儲存為學習模型的一部分。引數是機器學習演算法的關鍵。它們通常由過去的訓練資料中總結得出。在經典的機器學習文獻中,我們可以將模...