モデルパラメータ(Parameters)と計算量(FLOPs)の取得【thopを利用】

ヒント: 一部のオープン ソース コードには、ネットワーク パラメーターと計算を計算するためのコードがありません。ネットワークのパラメータ量と計算量を求める一般的な方法を示します。 タップを使用してすぐに入手します

1 モデルパラメータと計算

パラメータの量 #paramsつまり、ネットワーク モデルに含まれるパラメータの数です。これは入力データとは関係ありませんが、主にモデルの構造と関係があり、モデルの動作に与える主な影響は必要なメモリまたはビデオ メモリです。

計算量 #FLOPs通常、計算量を表すために FLOP (浮動小数点演算、浮動小数点演算の回数) が使用され、主にアルゴリズム/モデルの複雑さを測定します。論文では、一般的に GFLOPs、1GFLOPs=10^9 FLOPs で表されます。

2 インストールタップ

pip install thop

3 サンプルコード

#### (下記ネットワークのパラメータ量や計算量の計算など) ####

import torch
import torch.nn as nn

# SENet
class SELayer(nn.Module):
    def __init__(self, channel, reduction=16):
        super(SELayer, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )

    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)

#### (コードは自分で最適化できます) ####

import thop
if __name__ == '__main__':
    # 输入1 channel
    model = SELayer(channel=64)
    # (1, 64, 640, 640) 输入的图片尺寸
    x = torch.randn(1, 64, 640, 640)
    flops, params = thop.profile(model, inputs=(x,))
    print("%s | %s | %s" % ("Model", "Params(M)", "FLOPs(G)"))
    print("------|-----------|------")
    print("%s | %.7f | %.7f" % ("模型  ", params / (1000 ** 2), flops / (1000 ** 3)))

4 結果表示

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/lafsca5/article/details/130461964