使用参数共享计算卷积神经网络中的权数

时间:2019-02-14 12:11:30

标签: deep-learning conv-neural-network

在阅读Mike O'Neill的书Machine Learning: a Probabilistic Perspective by Murphythis article时,我遇到了一些我想了解的关于卷积神经网络中权数的计算。网络的架构是这样的:

enter image description here

这是上面文章的解释:

  

第2层也是卷积层,但具有50个特征图。每   功能图是5x5,功能图中的每个单元都是5x5   特征的全部6个对应区域的卷积核   先前图层的地图,每个图层都是13x13的要素地图。   因此,第2层中有5x5x50 = 1250个神经元,(5x5 + 1)x6x50 =   7800个权重,以及1250x26 = 32500个连接。

重量数的计算(5x5 + 1)x6x50 = 7800 对我来说很奇怪。不应是这样的实际计算: (5x5x6 + 1)x50 = 7550 根据说明的here参数共享。

我的论据如下: 我们有50个大小为5x5x6的过滤器,每个过滤器有1个偏差,因此权重总数为(5x5x6 + 1)x50 = 7550。这是验证以下内容的Pytorch代码:

import torch
import torch.nn as nn

model = nn.Conv2d(in_channels=6, out_channels=50, kernel_size=5, stride=2)
params_count = sum(param.numel() for param in model.parameters() if param.requires_grad)
print(params_count) # 7550

任何人都可以解释一下,哪个是正确的?

1 个答案:

答案 0 :(得分:1)

我的计算:

第1层深度为6,内核:5 * 5
第2层深度为50,内核:5 * 5

第2层神经元总数:5 * 5 * 50 = 1250

总重量为:5 * 5 * 50 * 6 = 7500

最后,#Layer-2的偏差= 50(深度为50)

我同意你的观点:总重量必须为7550。