当前位置: 首页 > 知识库问答 >
问题:

如何计算卷积神经网络的参数个数?

商柏
2023-03-14

我正在使用千层面为MNIST数据集创建CNN。我将密切关注这个示例:卷积神经网络和Python特征提取。

我目前拥有的CNN架构(不包括任何退出层)是:

NeuralNet(
    layers=[('input', layers.InputLayer),        # Input Layer
            ('conv2d1', layers.Conv2DLayer),     # Convolutional Layer
            ('maxpool1', layers.MaxPool2DLayer), # 2D Max Pooling Layer
            ('conv2d2', layers.Conv2DLayer),     # Convolutional Layer
            ('maxpool2', layers.MaxPool2DLayer), # 2D Max Pooling Layer
            ('dense', layers.DenseLayer),        # Fully connected layer
            ('output', layers.DenseLayer),       # Output Layer
            ],
    # input layer
    input_shape=(None, 1, 28, 28),

    # layer conv2d1
    conv2d1_num_filters=32,
    conv2d1_filter_size=(5, 5),
    conv2d1_nonlinearity=lasagne.nonlinearities.rectify,

    # layer maxpool1
    maxpool1_pool_size=(2, 2),

    # layer conv2d2
    conv2d2_num_filters=32,
    conv2d2_filter_size=(3, 3),
    conv2d2_nonlinearity=lasagne.nonlinearities.rectify,

    # layer maxpool2
    maxpool2_pool_size=(2, 2),


    # Fully Connected Layer
    dense_num_units=256,
    dense_nonlinearity=lasagne.nonlinearities.rectify,

   # output Layer
    output_nonlinearity=lasagne.nonlinearities.softmax,
    output_num_units=10,

    # optimization method params
    update= momentum,
    update_learning_rate=0.01,
    update_momentum=0.9,
    max_epochs=10,
    verbose=1,
    )

这将输出以下图层信息:

  #  name      size
---  --------  --------
  0  input     1x28x28
  1  conv2d1   32x24x24
  2  maxpool1  32x12x12
  3  conv2d2   32x10x10
  4  maxpool2  32x5x5
  5  dense     256
  6  output    10

并输出可学习参数的数量为217,706

我想知道这个数字是如何计算的?我已经阅读了许多资源,包括这个StackOverflow的问题,但没有一个明确概括了计算。

如果可能,每层可学习参数的计算是否可以泛化?

例如,卷积层:过滤器数量x过滤器宽度x过滤器高度。

共有3个答案

那谦
2023-03-14

卷积层大小为计算值=((n 2p-k)/s)1

这里,

  • n是输入p是填充k是内核或过滤器s是跨步

在上述情况下

  • n=28 p=0 k=5 s=1
裴鸿熙
2023-03-14

在@hbaderts出色回复的基础上,刚刚提出了一些I-C-P-C-P-H-O网络的公式(因为我正在研究类似的问题),并在下图中分享,可能会有所帮助。

此外,(1)具有2x2步幅的卷积层和(2)具有2x2步幅的卷积层1x1步幅(最大/平均)池,每个都以“相同”填充提供相同数量的参数,如下所示:

关苗宣
2023-03-14

让我们首先看看如何为您拥有的每种类型的图层计算可学习参数的数量,然后计算示例中的参数数量。

>

在这里,输入有l=32特征映射作为输入,k=64特征映射作为输出,过滤器大小为n=3xm=3。重要的是要理解,我们不仅仅有一个3x3过滤器,实际上是一个3x3x32过滤器,因为我们的输入有32个维度。我们学习了64个不同的3x3x32过滤器。因此,权重的总数为n*m*k*l。然后,每个特征映射还有一个偏置项,因此我们有一个(n*m*l 1)*k的参数总数。

最后一个困难是第一个完全连接的层:我们不知道输入到该层的维度,因为它是一个卷积层。要计算它,我们必须从输入图像的大小开始,并计算每个卷积层的大小。在你的例子中,拉萨涅已经为你计算了这个并报告了大小——这对我们来说很容易。如果你必须自己计算每一层的大小,那就有点复杂了:

  • 在最简单的情况下(如您的示例),卷积层的输出大小是输入大小-(filter\u size-1),在您的情况下:28-4=24。这是由于卷积的性质:我们使用5x5邻域来计算点,但最外面的两行和列没有5x5邻域,因此我们无法计算这些点的任何输出。这就是为什么我们的输出比输入小2*2=4行/列的原因

在您的情况下,完整的计算如下:

  #  name                           size                 parameters
---  --------  -------------------------    ------------------------
  0  input                       1x28x28                           0
  1  conv2d1   (28-(5-1))=24 -> 32x24x24    (5*5*1+1)*32   =     832
  2  maxpool1                   32x12x12                           0
  3  conv2d2   (12-(3-1))=10 -> 32x10x10    (3*3*32+1)*32  =   9'248
  4  maxpool2                     32x5x5                           0
  5  dense                           256    (32*5*5+1)*256 = 205'056
  6  output                           10    (256+1)*10     =   2'570

因此,在您的网络中,您总共有832 9'248 205'056 2'570=217'706个可学习的参数,这正是千层面报告的内容。

 类似资料:
  • 我是CNN研究的新手,我从看Andrew'NG的课程开始。有一个例子我不明白: 他是如何计算#参数值的?

  • 我指的是在此链接https://richliao.github.io/supervised/classification/2016/11/26/textclassifier-convolutional上实现的“使用CNN的文本分类”。在“简化卷积”一节中,他们使用了以下Keras层: Conv1D(128、5,激活='RELU')

  • 如何计算CNN网络中的参数总数 代码如下: 如何获取320、18496、73856、590336、2052,有人能解释一下吗?

  • 我在Keras有卷积神经网络。我需要知道每个图层中要素地图的尺寸。我的输入是28 x 28像素的图像。我知道有一种计算方法,但我不知道如何计算。下面是我使用Keras的代码片段。 最后,这就是我想画的。非常感谢。

  • 我找不到正确的公式来计算CNN中一个卷积层中的MAC数量。我从Quora尝试了这个公式 式中:输入特征映射的HW大小;KL滤波器大小S跨距C通道输入M输出特征映射N输入特征映射数 我举了一个例子:1个输入图像5x5x1 1个过滤器3x3x1然后我做了一个天真的计算,我得到了81个MAC。但当我使用上述公式时,ai得到了9。 我想有些事情我不明白。 提前感谢

  • 注意: 本教程适用于对Tensorflow有丰富经验的用户,并假定用户有机器学习相关领域的专业知识和经验。 概述 对CIFAR-10 数据集的分类是机器学习中一个公开的基准测试问题,其任务是对一组大小为32x32的RGB图像进行分类,这些图像涵盖了10个类别: 飞机, 汽车, 鸟, 猫, 鹿, 狗, 青蛙, 马, 船以及卡车。 想了解更多信息请参考CIFAR-10 page,以及Alex Kriz