2016-06-14 34 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()是非常有用的,當你想設置不同的學習率分層。