Torch7,如何计算一个convNet中的参数个数

Torch7, how to calculate the number of parameters in a convNet

我正在寻找一种方法来计算卷积神经网络中的参数数量。特别是,我在 https://github.com/facebook/fb.resnet.torch 中使用了 Resnet 模型。 你知道有没有可以计算参数总数的函数?您还有其他建议吗? 提前致谢。

您基本上必须遍历网络的每一层并计算该层中的参数数量。这是一个执行此操作的示例函数:

-- example model to be fed to the function
model = nn.Sequential()
model:add(nn.SpatialConvolution(3,12,1,1))
model:add(nn.Linear(2,3))
model:add(nn.ReLU())

function countParameters(model)
local n_parameters = 0
for i=1, model:size() do
   local params = model:get(i):parameters()
   if params then
     local weights = params[1]
     local biases  = params[2]
     n_parameters  = n_parameters + weights:nElement() + biases:nElement()
   end
end
return n_parameters
end

如果您要在 torch 中训练网络,您必须首先提取其参数向量和梯度向量 w.r.t。这些参数(都是一维张量):

params, gradParams = net:getParameters()

完成后,很容易得到learnable个参数的个数:

n_params = params:size(1)

补充一下已经回答的,如果只是想在层级统计网络的参数个数,最好使用

params, gradParams = net:parameters()
print(#params)

而不是 getParameters()(returns 一个扁平的长张量)。

函数parameters()在你想要逐层设置不同的学习率时非常有用。