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

怎么在torch安装cudnn

CS231n 卷积神经网络与计算机视觉 9 卷积神经网络结构分析

Torch7的安装

利用 OpenCV+ConvNets 检测几何图形