私は与えられたアーキテクチャが持つパラメータの数を計算するための簡単なスクリプトを書いた。ここにある: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)
あなたは、彼らが表1にリストしたすべてのパラメータを追加した場合、その紙には、パラメータの総数がなっている間、私は、GoogleNetでこれを使用し、使用されるパラメータの数の11,193,984
を得ました6.7M!テーブルも正確ではないようです。私の質問は今、私はこれを正しくしていますか?私は別のアーキテクチャで同じスクリプトを使用し、正しい結果を得ました。
たとえば、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のレイヤーとスケールは考慮されていません。私はbatchnormとバッチノルムの両方を使ってテストし、同じ数のパラメータを得ました – Breeze