我正在寻找一种计算卷积神经网络中参数数量的方法。特别是,我在https://github.com/facebook/fb.resnet.torch中使用了Resnet模型。 你知道是否有任何函数可以计算参数总数?这样做你有其他建议吗? 提前致谢。
答案 0 :(得分:3)
如果要在torch
中训练网络,则必须首先提取其参数的矢量和渐变矢量w.r.t.这些参数(都是一维张量):
params, gradParams = net:getParameters()
完成后,很容易获得可学习参数的数量:
n_params = params:size(1)
答案 1 :(得分:0)
您基本上必须遍历网络的每一层并计算该层中的参数数量。以下是一个示例函数:
-- 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
答案 2 :(得分:0)
添加到已回答的内容,如果您只想在层级计算网络参数的数量,最好使用
params, gradParams = net:parameters()
print(#params)
而不是getParameters()
(返回扁平的长张量)。
当您想要逐层设置不同的学习率时,函数parameters()
非常有用。