我們要比較乙個模型的效能,往往不僅僅是模型的表現效果,往往要兼顧模型的參數量和計算量。
這裡主要列出了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.一次卷積...