【他山之石】pytorch計算模型FLOPs和Params

2021-02-19 人工智慧前沿講習

「他山之石,可以攻玉」,站在巨人的肩膀才能看得更高,走得更遠。在科研的道路上,更需藉助東風才能更快前行。為此,我們特別搜集整理了一些實用的代碼連結,數據集,軟體,編程技巧等,開闢「他山之石」專欄,助你乘風破浪,一路奮勇向前,敬請關注。

地址:https://www.zhihu.com/people/zhuang-ming-xi-31-16

網絡框架模型計算量影響到模型的推斷時間,模型的參數量對設備內存有要求,為了進行模型比較給大家介紹兩種計算FLOPs和Params實用的小工具:

01

https://github.com/Lyken17/pytorch-OpCounter

pip install thop(推薦用這個) 或者 pip install 

用法:

from torchvision.models import resnet50from thop import profilemodel = resnet50()flops, params = profile(model, input_size=(1, 3, 224,224))print('FLOPs = ' + str(flops/1000**3) + 'G')print('Params = ' + str(params/1000**2) + 'M')

class YourModule(nn.Module):model = YourModule()flops, params = profile(model, input_size=(1, 3, 224,224))print('FLOPs = ' + str(flops/1000**3) + 'G')print('Params = ' + str(params/1000**2) + 'M')

class YourModule(nn.Module):def count_your_model(model, x, y):flops, params = profile(model, input_size=(1, 3, 224,224),custom_ops={YourModule: count_your_model})print('FLOPs = ' + str(flops/1000**3) + 'G')print('Params = ' + str(params/1000**2) + 'M')

02

https://github.com/sovrasov/flops-counter.pytorch

pip install ptflops 或者 pip install 

使用方法:

import torchvision.models as modelsimport torchfrom ptflops import get_model_complexity_info
with torch.cuda.device(0): net = models.densenet161() macs, params = get_model_complexity_info(net, (3, 224, 224), as_strings=True, print_per_layer_stat=True, verbose=True) print('{:<30} {:<8}'.format('Computational complexity: ', macs)) print('{:<30} {:<8}'.format('Number of parameters: ', params))

其中print_per_layer_stat用來管理是否輸出每一層的參數量和計算量。

本文目的在於學術交流,並不代表本公眾號贊同其觀點或對其內容真實性負責,版權歸原作者所有,如有侵權請告知刪除。

更多他山之石專欄文章,請點擊文章底部「閱讀原文」查看

分享、點讚、在看,給個三連擊唄!

相關焦點

  • 【他山之石】pytorch_lightning 全程筆記
    「他山之石,可以攻玉」,站在巨人的肩膀才能看得更高,走得更遠。
  • 【他山之石】人臉屬性pytorch示例
    最後的區別就是如何選擇標籤進行訓練,也就是損失函數構建。我們示例就使用交叉熵進行二分類,wingloss和SmoothL1Loss做回歸。並且演示了如何解決loss出現nan;如何實現fl,qfl,vfl;如何對動態標籤進行選擇等。
  • 兩行代碼統計模型參數量與FLOPs,這個PyTorch小工具值得一試
    近日,GitHub 開源了一個小工具,它可以統計 PyTorch 模型的參數量與每秒浮點運算數(FLOPs)。有了這兩種信息,模型大小控制也就更合理了。其實模型的參數量好算,但浮點運算數並不好確定,我們一般也就根據參數量直接估計計算量了。但是像卷積之類的運算,它的參數量比較小,但是運算量非常大,它是一種計算密集型的操作。反觀全連接結構,它的參數量非常多,但運算量並沒有顯得那麼大。
  • 【他山之石】一文讀懂 PyTorch 模型保存與載入
    「他山之石,可以攻玉」,站在巨人的肩膀才能看得更高,走得更遠。在科研的道路上,更需藉助東風才能更快前行。
  • 【他山之石】Pytorch Lightning 完全攻略
    但是後面隨著做的項目開始出現了一些稍微高階的要求,我發現我總是不斷地在相似工程代碼上花費大量時間,Debug也是這些代碼花的時間最多,而且漸漸產生了一個矛盾之處:如果想要更多更好的功能,如TensorBoard支持,Early Stop,LR Scheduler,分布式訓練,快速測試等,代碼就無可避免地變得越來越長,看起來也越來越亂,同時核心的訓練邏輯也漸漸被這些工程代碼蓋過。
  • 【他山之石】Ray和Pytorch Lightning 使用指北
    為此,我們特別搜集整理了一些實用的代碼連結,數據集,軟體,編程技巧等,開闢「他山之石」專欄,助你乘風破浪,一路奮勇向前,敬請關注。模型選擇,選擇合適的模型,使用Pytorch框架的話就是繼承一個nn.module類。模型訓練,使用各種花裡胡哨的訓練方式,比如分布式,半精度,各種優化器輪著來。而這部分往往是論文不太涉及的部分,也是我們一般稱為dirty work的部分。因為訓練模型,超參搜索,都是沒有什麼創新但是又需要很大的功夫去寫這些重複的代碼。而pytorch lightning這個框架主要解決的就是上述提到的第三步。
  • 【他山之石】PyTorch trick 集錦
    指定GPU的命令需要放在和神經網絡相關的一系列操作的前面。02查看模型每層輸出詳情Keras有一個簡潔的API來查看模型的每一層輸出尺寸,這在調試網絡時非常有用。現在在PyTorch中也可以實現這個功能。
  • 【他山之石】pytorch常見的坑匯總
    為此,我們特別搜集整理了一些實用的代碼連結,數據集,軟體,編程技巧等,開闢「他山之石」專欄,助你乘風破浪,一路奮勇向前,敬請關注。好像扯遠了,回歸pytorch,首先讓我比較尷尬的是pytorch並沒有一套屬於自己的數據結構以及數據讀取算法,dataloader個人感覺其實就是類似於tf中的feed,並沒有任何速度以及性能上的提升。
  • 【他山之石】pytorch 實現雙邊濾波
    為此,我們特別搜集整理了一些實用的代碼連結,數據集,軟體,編程技巧等,開闢「他山之石」專欄,助你乘風破浪,一路奮勇向前,敬請關注。原文地址:https://zhuanlan.zhihu.com/p/310710051前幾天研究了傳統的美顏算法,了解到雙邊濾波(bilateral filtering)。在看懂原理後,為加深理解,抽時間用 pytorch 重新造了個輪子。
  • 【他山之石】快速掌握BERT原始碼(pytorch)
    「他山之石,可以攻玉」,站在巨人的肩膀才能看得更高,走得更遠。
  • 【他山之石】PyTorch使用預訓練模型進行模型加載
    為此,我們特別搜集整理了一些實用的代碼連結,數據集,軟體,編程技巧等,開闢「他山之石」專欄,助你乘風破浪,一路奮勇向前,敬請關注。地址:https://www.zhihu.com/people/panda-9-6通過模型以及模型參數的保存,實現模型的加載,我之前已經在一篇文章寫過了,在最近的學習任務中,以及和知友的討論中,遇到了這樣一種情況,如果網絡模型發生改動,那麼使用預訓練模型進行加載的情況下,網絡模型是如何加載的,對此進行了一些簡單的實驗。來驗證自己的一些想法。
  • 【他山之石】使用PyTorch 1.6 for Android
    為此,我們特別搜集整理了一些實用的代碼連結,數據集,軟體,編程技巧等,開闢「他山之石」專欄,助你乘風破浪,一路奮勇向前,敬請關注。本文將演示如何將一個resnet18的PyTorch模型運行在Android手機上。
  • pytorch實用工具總結
    = output_channels * (kernel_ops + bias_ops) flops = batch_size * params * output_height * output_width list_conv.append(flops) list_linear=[] def linear_hook(self, input
  • 【他山之石】編譯PyTorch靜態庫
    然而當你想基於CMake來構建PyTorch靜態庫時,你會發現:由於重構整體的CMake結構需要很多的人力,一時半會還看不到優雅的解決方案,因此在這裡,Gemfield先寫篇文章來說明PyTorch的靜態編譯如何進行,以及各種注意事項。本文基於目前最新的PyTorch 1.7(在最新的master分支上也沒有問題)。尤其是涉及到PyTorch靜態編譯重構的時候,還牽涉到代碼的重新設計。
  • onnx實現對pytorch模型推理加速
    ONNX Runtime是適用於Linux,Windows和Mac上ONNX格式的機器學習模型的高性能推理引擎。對於硬體供應商來說,也可以簡化神經網絡計算的複雜度,實現優化算法。Pytorch 模型轉onnx當提到保存和加載模型時,有三個核心功能需要熟悉:1.torch.save:將序列化的對象保存到disk。這個函數使用Python的pickle實用程序進行序列化。使用這個函數可以保存各種對象的模型、張量和字典。
  • 【他山之石】適合PyTorch小白的官網教程:Learning PyTorch With Examples
    地址:https://www.zhihu.com/people/liu-xin-chen-64https://pytorch.org/tutorials/beginner/pytorch_with_examples.html不構建計算圖、手動實現梯度計算、手動SGD更新參數數據張量和參數張量不分離、自動計算梯度、手動SGD更新參數數據張量和參數張量不分離、自動計算梯度、手動SGD
  • 【他山之石】pytorch 中張量基本操作
    為此,我們特別搜集整理了一些實用的代碼連結,數據集,軟體,編程技巧等,開闢「他山之石」專欄,助你乘風破浪,一路奮勇向前,敬請關注。的tensor與numpy的NDArray轉換"""pytorch的numpy()函數:tensor-->NDArraypytorch的from_numpy()函數:NDArray-->tensor"""import numpy as npx = torch.rand(2,3)print(x)ndarray
  • 【他山之石】PyTorch | DDP系列:入門教程、實現原理與原始碼解析、實戰與技巧
    看完這節後,你的收穫將是:了解分布式計算的概念了解PyTorch模型的狀態表示和構成學習DDP的精巧的實現技巧學會如何debug你的DDP模型請歡快地開始閱讀吧!我們知道,BN中有moving mean和moving variance這兩個buffer,這兩個buffer的更新依賴於當前訓練輪次的batch數據的計算結果。但是在普通多卡DP模式下,各個模型只能拿到自己的那部分計算結果,所以在DP模式下的普通BN被設計為只利用主卡上的計算結果來計算moving mean和moving variance,之後再廣播給其他卡。
  • 【他山之石】Windows/Linux/MacOS 編譯 PNNX 步驟
    「他山之石,可以攻玉」,站在巨人的肩膀才能看得更高,走得更遠。
  • TensorRT和PyTorch模型的故事
    其實原理都是一樣的,對於tensorflow模型,需要把pb模型轉化為uff模型;對於pytorch模型,需要把pth模型轉化為onnx模型;對於caffe模型,則不需要轉化,因為tensorRT是可以直接讀取caffe模型的。mxnet模型也是需要轉化為onnx的。