如何计算模型中的参数数量,例如用于 mnist 的 LENET,或用于 imagent 模型的 ConvNet 等。caffe 中是否有任何特定函数可以返回或保存模型中的参数数量。问候
问问题
4396 次
2 回答
4
这是一个用于计算 Caffe 模型中参数数量的 python 片段:
import caffe
caffe.set_mode_cpu()
import numpy as np
from numpy import prod, sum
from pprint import pprint
def print_net_parameters (deploy_file):
print "Net: " + deploy_file
net = caffe.Net(deploy_file, caffe.TEST)
print "Layer-wise parameters: "
pprint([(k, v[0].data.shape) for k, v in net.params.items()])
print "Total number of parameters: " + str(sum([prod(v[0].data.shape) for k, v in net.params.items()]))
deploy_file = "/home/ubuntu/deploy.prototxt"
print_net_parameters(deploy_file)
# Sample output:
# Net: /home/ubuntu/deploy.prototxt
# Layer-wise parameters:
#[('conv1', (96, 3, 11, 11)),
# ('conv2', (256, 48, 5, 5)),
# ('conv3', (384, 256, 3, 3)),
# ('conv4', (384, 192, 3, 3)),
# ('conv5', (256, 192, 3, 3)),
# ('fc6', (4096, 9216)),
# ('fc7', (4096, 4096)),
# ('fc8', (819, 4096))]
# Total number of parameters: 60213280
https://gist.github.com/kaushikpavani/a6a32bd87fdfe5529f0e908ed743f779
于 2016-09-25T14:19:35.313 回答
1
我可以通过 Matlab 界面提供一种明确的方法来执行此操作(确保首先安装 matcaffe)。基本上,您从每个网络层中提取一组参数并计算它们。在 Matlab 中:
% load the network
net_model = <path to your *deploy.prototxt file>
net_weights = <path to your *.caffemodel file>
phase = 'test';
test_net = caffe.Net(net_model, net_weights, phase);
% get the list of layers
layers_list = test_net.layer_names;
% for those layers which have parameters, count them
counter = 0;
for j = 1:length(layers_list),
if ~isempty(test_net.layers(layers_list{j}).params)
feat = test_net.layers(layers_list{j}).params(1).get_data();
counter = counter + numel(feat)
end
end
最后,“计数器”包含参数的数量。
于 2015-07-14T06:46:59.320 回答