Torch7,如何计算一个convNet中的参数个数
Posted
技术标签:
【中文标题】Torch7,如何计算一个convNet中的参数个数【英文标题】:Torch7, how to calculate the number of parameters in a convNet 【发布时间】:2016-10-14 20:49:15 【问题描述】:我正在寻找一种方法来计算卷积神经网络中的参数数量。特别是,我在https://github.com/facebook/fb.resnet.torch 中使用了 Resnet 模型。 你知道是否有任何函数可以计算参数的总数?你有其他建议吗? 提前致谢。
【问题讨论】:
【参考方案1】:如果你要在torch
中训练一个网络,你必须首先提取它的参数向量和梯度向量 w.r.t。这些参数(都是一维张量):
params, gradParams = net:getParameters()
搞定后,很容易得到可学习参数的个数:
n_params = params:size(1)
【讨论】:
【参考方案2】:您基本上必须遍历网络的每一层并计算该层中的参数数量。这是一个执行此操作的示例函数:
-- 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
【讨论】:
我认为有一个特定的功能可以做到这一点,但我无法找到。非常感谢您的帮助! 如果您发现此答案有帮助,您介意将其标记为正确答案吗?这会增加我的声誉。【参考方案3】:补充一下,如果你只是想统计层级网络的参数个数,你最好用
params, gradParams = net:parameters()
print(#params)
而不是getParameters()
(它返回一个扁平的长张量)。
parameters()
函数在您想逐层设置不同的学习率时非常有用。
【讨论】:
以上是关于Torch7,如何计算一个convNet中的参数个数的主要内容,如果未能解决你的问题,请参考以下文章
论文记录-Pruning Filters For Efficient ConvNets
论文记录-Pruning Filters For Efficient ConvNets