模型參數量和計算量獲取的小工具

2021-09-26 08:39:39 字數 1477 閱讀 4479

我們要比較乙個模型的效能,往往不僅僅是模型的表現效果,往往要兼顧模型的參數量和計算量。

這裡主要列出了pytorch和tensorflow的統計引數和計算量的方法,參數量只和模型有關,和模型的輸入無關,而計算量和模型的參數量有關也和模型的輸入有關對於tensorflow可由下列**獲取計算量和參數量:

import tensorflow as tf

from model import mobilenetv2#這裡是匯入你要計算的模型

w,h,c=128,128,3#這裡定義自己的輸入解析度

def stats_graph(graph):

flops = tf.profiler.profile(graph, options=tf.profiler.profileoptionbuilder.float_operation())

params = tf.profiler.profile(graph, options=tf.profiler.profileoptionbuilder.trainable_variables_parameter())

print('flops: {}; trainable params: {}'.format(flops.total_float_ops, params.total_parameters))

with tf.graph().as_default() as graph:

x=tf.placeholder(tf.float32,shape=[1,w,h,c],name='x')

logits=mobilenetv2(x,num_classes=11,is_train=true,reuse=false)

stats_graph(graph)

對於pytorch需要安裝乙個thop的包,在cmd或者終端上執行:pip install thop, 然後用下面的小工具可以獲取常見的一些pytorch自帶的模型:

from torchvision.models import resnet50	

from thop import profile

model = resnet50()

input = torch.randn(1, 3, 224, 224)

flops, params = profile(model, inputs=(input, ))

pytorch也可以計算自定義的模型:

class ourmodule(nn.module):	

# our definition

def count_your_model(model, x, y):

# our rule here

input = torch.randn(1, 3, 224, 224)

flops, params = profile(model, inputs=(input, ),

custom_ops=)

參考部落格:

卷積核的參數量和計算量

通常只看乘法計算量 c代表通道數,ci輸入通道數,c0為輸出通道數。h w為長寬 如下圖 當前特徵圖ci h w 把特徵圖複製c0個,分別與3 3 ci的卷積核進行卷積,輸出特徵圖大小c0 h w,用c0個3 3 ci的卷積核進行卷積操作,所以參數量為3 3 ci c0,在h w的特徵圖上操作,故計...

Linux中的基礎和小工具

bash的捷鍵 ctrl a 游標移到命令列首,相當於home ctrl e 游標移到命令行尾,相當於end ctrl f 游標向右移動乙個字元 ctrl b 游標向左移動乙個字元 alt f 游標向右移動乙個單詞尾 alt b 游標向左移動乙個單詞首 ctrl xx 游標在命令列首和游標之間移動 ...

卷積神經網路參數量和計算量記憶體計算

每一次卷積的參數量和特徵圖的大小無關,僅和卷積核的大小,偏置及bn有關。1.每個卷積層的參數量,1表示偏置 co x kw x kh x cin 1 2.全連線層的參數量 d1 1 x d2 3.bn層的參數量 因為bn層需要學習兩個引數 gamma 和 beta 所以參數量是2xco 1.一次卷積...