Machine learning 深Conv模型参数数

Machine learning 深Conv模型参数数,machine-learning,deep-learning,computer-vision,artificial-intelligence,conv-neural-network,Machine Learning,Deep Learning,Computer Vision,Artificial Intelligence,Conv Neural Network,我在读这篇声明: 具有两个5x5卷积层的CNN(第一个具有32个通道,第二个为 第二个是64个,每个之后是2x2最大池),一个完全连接的 带有512个单元和ReLu激活的图层,以及最终的softmax输出 图层(1663370总参数) 我看不出他们是如何计算160万个参数的。相同的网络实现为我提供了约580k的参数,鉴于这是一个小型网络,这更为现实 假设您谈论的是MNIST图像,1个输入通道,步幅=1,填充=2 INPUT: [28x28x1] weights: 0 CONV5-32:

我在读这篇声明:

具有两个5x5卷积层的CNN(第一个具有32个通道,第二个为 第二个是64个,每个之后是2x2最大池),一个完全连接的 带有512个单元和ReLu激活的图层,以及最终的softmax输出 图层(1663370总参数)


我看不出他们是如何计算160万个参数的。相同的网络实现为我提供了约580k的参数,鉴于这是一个小型网络,这更为现实

假设您谈论的是MNIST图像,1个输入通道,步幅=1,填充=2

INPUT:    [28x28x1]   weights: 0
CONV5-32: [28x28x32]  weights: (1*5*5)*32 + 32  =       832 
POOL2:    [14x14x32]  weights: 0
CONV5-64: [14x14x64]  weights: (5*5*32)*64 + 64 =    51,264 
POOL2:    [7x7x64]    weights: 0
FC:       [1x1x512]   weights: 7*7*64*512 + 512 = 1,606,144
Softmax:  [1x1x10]    weights: 512*10 + 10      =     5,130 
-----------------------------------------------------------
                                                  1,663,370

考虑到这种欺骗行为,以下是获得1663370的方法:

import torch.nn as nn

#First fully-connected (linear) layer input size as in the accepted answer:
linear_in = 7*7*64

model = nn.Sequential(
    nn.Conv2d(1,32,5),
    nn.MaxPool2d(2,2),
    nn.Conv2d(32,64,5),
    nn.MaxPool2d(2,2),
    nn.Linear(linear_in, 512), 
    nn.ReLU(),
    nn.Linear(512,10)
)
现在,参数:

sum([p.numel() for p in model.parameters()])
1663370
逐层:

for p in model.parameters():
    print(p.size())
    print(p.numel())

torch.Size([32, 1, 5, 5])
800
torch.Size([32])
32
torch.Size([64, 32, 5, 5])
51200
torch.Size([64])
64
torch.Size([512, 3136])
1605632
torch.Size([512])
512
torch.Size([10, 512])
5120
torch.Size([10])
10

你在哪里读的?如果没有参考,很难给出解释。请同时给出输入图像的大小。另外,请考虑频道的数量。可能需要考虑3个输入通道,然后YU580K将成为要求的1.6M?@ AtTrTununv,它是Mnister-28 x28 1通道,我认为您忘记了“最后的SoftMax层”,它是512×10,但是它仍然不总计达1663,370@SaiBot考虑第一层,5×5×32=800。为什么又添加了32个?@ArtemTrunov True忘记了softmax,更重要的是,conv2参数计算中有一个错误。另外32个是用来表示偏见的。是的,这是一个很难理解的方式。第一个答案在我看来更好,也更直观,因为为了获得7x7x64,你真的需要添加2-0填充,否则数学就不行了。