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()
在你想要逐层设置不同的学习率时非常有用。
我正在寻找一种方法来计算卷积神经网络中的参数数量。特别是,我在 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()
在你想要逐层设置不同的学习率时非常有用。