如何计算卷积神经网络的参数数量?
computer-vision
machine-learning
neural-network
4
0

我无法提供正确数量的AlexNetVGG Net参数。

例如,要计算VGG Net的conv3-256层的参数数量,答案为0.59M =(3 * 3)*(256 * 256),即(内核大小)*(两者的乘积通道中的通道),但是以这种方式,我无法获得138M参数。

那么,您能告诉我我的计算出了什么问题,或者告诉我正确的计算程序吗?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

如果使用16层VGG Net(表1,D列),则138M表示该网络的参数总数 ,即包括所有卷积层,也包括完全连接的层。

看一下由3 x conv3-256层组成的第3个卷积阶段:

  • 第一个具有N = 128个输入平面和F = 256个输出平面,
  • 另外两个具有N = 256个输入平面和F = 256个输出平面。

对于这些层中的每一层,卷积内核都是3x3。就参数而言,这给出:

  • 第一个参数为128x3x3x256(权重)+ 256(偏置)= 295,168,
  • 256x3x3x256(权重)+ 256(偏差)= 590,080个其他两个参数。

如上所述,您必须对所有层都进行此操作,还要对完全连接的层进行此操作,并对这些值求和以获得最终的138M编号。

--

更新 :各层之间的细分给出:

conv3-64  x 2       : 38,720
conv3-128 x 2       : 221,440
conv3-256 x 3       : 1,475,328
conv3-512 x 3       : 5,899,776
conv3-512 x 3       : 7,079,424
fc1                 : 102,764,544
fc2                 : 16,781,312
fc3                 : 4,097,000
TOTAL               : 138,357,544

特别是对于完全连接的层(fc):

 fc1 (x): (512x7x7)x4,096 (weights) + 4,096 (biases)
 fc2    : 4,096x4,096     (weights) + 4,096 (biases)
 fc3    : 4,096x1,000     (weights) + 1,000 (biases)

(x)参见文章的3.2节:首先将完全连接的层转换为卷积层(第一个FC层转换为7×7转换层,最后两个FC层转换为1×1转换层)。

关于fc1详细信息

正如在送入全连接层之前的空间分辨率之上所精确指出的那样,该像素为7x7像素。这是因为此VGG Net在卷积之前使用了空间填充 ,如本文第2.1节所述:

转换的空间填充层输入是在卷积后保留空间分辨率,即,对于3×3转换,填充为1像素。层。

通过这样的填充,并使用224x224像素的输入图像,分辨率会沿以下各层依次降低:112x112、56x56、28x28、14x14和7x7,位于具有512个特征图的最后一个卷积/合并阶段之后。

这给出了传递给fc1的特征矢量,尺寸为:512x7x7。

收藏
评论

CS231n的讲义中也对VGG-16网络的计算进行了详细分类。

INPUT:     [224x224x3]    memory:  224*224*3=150K   weights: 0
CONV3-64:  [224x224x64]   memory:  224*224*64=3.2M  weights: (3*3*3)*64 = 1,728
CONV3-64:  [224x224x64]   memory:  224*224*64=3.2M  weights: (3*3*64)*64 = 36,864
POOL2:     [112x112x64]   memory:  112*112*64=800K  weights: 0
CONV3-128: [112x112x128]  memory:  112*112*128=1.6M weights: (3*3*64)*128 = 73,728
CONV3-128: [112x112x128]  memory:  112*112*128=1.6M weights: (3*3*128)*128 = 147,456
POOL2:     [56x56x128]    memory:  56*56*128=400K   weights: 0
CONV3-256: [56x56x256]    memory:  56*56*256=800K   weights: (3*3*128)*256 = 294,912
CONV3-256: [56x56x256]    memory:  56*56*256=800K   weights: (3*3*256)*256 = 589,824
CONV3-256: [56x56x256]    memory:  56*56*256=800K   weights: (3*3*256)*256 = 589,824
POOL2:     [28x28x256]    memory:  28*28*256=200K   weights: 0
CONV3-512: [28x28x512]    memory:  28*28*512=400K   weights: (3*3*256)*512 = 1,179,648
CONV3-512: [28x28x512]    memory:  28*28*512=400K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [28x28x512]    memory:  28*28*512=400K   weights: (3*3*512)*512 = 2,359,296
POOL2:     [14x14x512]    memory:  14*14*512=100K   weights: 0
CONV3-512: [14x14x512]    memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [14x14x512]    memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [14x14x512]    memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
POOL2:     [7x7x512]      memory:  7*7*512=25K      weights: 0
FC:        [1x1x4096]     memory:  4096             weights: 7*7*512*4096 = 102,760,448
FC:        [1x1x4096]     memory:  4096             weights: 4096*4096 = 16,777,216
FC:        [1x1x1000]     memory:  1000             weights: 4096*1000 = 4,096,000

TOTAL memory: 24M * 4 bytes ~= 93MB / image (only forward! ~*2 for bwd)
TOTAL params: 138M parameters
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号