我写了一个简单的脚本来计算给定体系结构的参数数量。这就是:GoogleNet有多少个参数?
#python caffe_param_calc.py deploy.prototxt
#or just call the script without any arguments, and it will search and show any deploy you have in the current directory
import sys
import os
import caffe
import numpy as np
from numpy import prod, sum
from pprint import pprint
def print_net_parameters (deploy_file):
print "Net: " + deploy_file
caffe.set_mode_cpu()
net = caffe.Net(deploy_file, caffe.TEST)
print "Layer-wise parameters: "
pprint([(k, v[0].data.shape) for k, v in net.params.items()])
num = sum([prod(v[0].data.shape) for k, v in net.params.items()])
print ("Total number of parameters: {0:,} ".format(num))
print (len(sys.argv))
if len(sys.argv) > 1 :
deploy_file = sys.argv[1]
else:
for file in os.listdir('.'):
if (file.endswith('.prototxt')):
deploy_file = file
print_net_parameters(deploy_file)
我用这对GoogleNet并获得11,193,984
所使用的参数的数量,而在他们的论文,如果你在表1中添加了所有他们列出的参数,参数的总数成为670万!而且这表格似乎也不准确!我现在的问题是,我是否正确地做到了这一点?我在不同的体系结构上使用了相同的脚本,并获得了正确的结果。
例如VGGNet(Link)的参数总数为102,897,440。
Layer-wise parameters:
[('conv1', (96L, 3L, 7L, 7L)),
('conv2', (256L, 96L, 5L, 5L)),
('conv3', (512L, 256L, 3L, 3L)),
('conv4', (512L, 512L, 3L, 3L)),
('conv5', (512L, 512L, 3L, 3L)),
('fc6', (4096L, 18432L)),
('fc7', (4096L, 4096L)),
('fc8', (1000L, 4096L))]
Total number of parameters: 102,897,440
偏向条款呢?注意不要统计''BatchNorm''图层的参数。 – Shai
@Shai:不考虑Batchnorm层和鳞片。我测试了蝙蝠蛾和没有批量标准,并获得相同数量的参数 – Breeze