2016-06-14 32 views

回答

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 
+0

我以为有这样做的特定功能,我无法找到。非常感谢你的帮助! – Jessica

+0

如果您发现此答案有帮助,您会介意将其标记为正确答案吗?这会增加我的声誉。 – siavashk

3

如果你打算在torch训练网络,您必须先提取其参数的矢量和渐变的矢量w.r.t.这些参数(均为1D张量):

params, gradParams = net:getParameters() 

已经完成它,它很容易获得的可学习参数个数:

n_params = params:size(1) 
0

添加到什么已经回答了,如果你只是想计数的网络在层级别的参数个数,你最好使用

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

,而不是getParameters()(其中r蚀刻出扁平的长张量)。

功能parameters()是非常有用的,当你想设置不同的学习率分层。