【问题标题】:Stuck in the calculations of matrix sizes for a CNN陷入 CNN 矩阵大小的计算中
【发布时间】:2020-04-29 05:58:41
【问题描述】:

在我用于二进制分类的 CNN 架构中,我有 2 个卷积层、2 个最大池化层、2 个批标准化操作、1 个 RELu 和 1 个全连接层。

Case1:当通道数,d=1:在第一层输入大小为[28*28*d]d=1通道与@987654324卷积@ 应用于大小为 (f_h x f_w x d) = [3x 3x1] 的所有输入通道的过滤器数量,步长(步幅)为 1,创建大小为 {(h-f_h+1) x (w - f_w +1)x d x M_1} = (28-3 +1)x(28-3+1)x1x 20 = [25x 25x 20] 的特征图。

第二个卷积层包含两倍数量的过滤器 = 40 个相同大小的[3x 3 x 1]。因此,参数的数量变为[23 * 23 * 1 * 40] 作为第二个卷积层的输出。所以参数总数=[25x 25x 20]+ [23 * 23 * 40]

情况 2:当d=2 和所有其他大小相同时。过滤器大小变为[3 x 3 x 2]。第一个卷积层的输出将包含:(28-3 +1)x(28-3+1)x2 x20 = [25x 25x 40]

对于第二个卷积层,输出将包含[23 x 23 x 2 x 40] 参数。

问题)我对上述每种情况的计算是否正确?全连接层的输入是什么?

【问题讨论】:

    标签: math deep-learning classification conv-neural-network


    【解决方案1】:

    在卷积层中,没有。滤波器中的通道数保持等于输入的通道数。此外,没有。过滤器中的通道数不会影响输出的大小。输出的大小由下式给出:

    height = (input_height - filter_height + 1) (Assuming no padding and stride = 1)
    width = (input_width - filter_width + 1)
    channels = no. of filters
    

    所以对于你的问题:

    案例 1 (d=1):

    卷积层#1

    Input : 28 x 28 x 1, Filter : 3 x 3 x 1, #filters : 20
    So your output becomes (28-3+1) x (28-3+1) X #filters = 26 x 26 x 20
    

    上面的输出成为第二个卷积层的输入,这导致:

    卷积层 #2

    Input : 26 x 26 x 20, Filter : 3 x 3 x 20, #filters : 40 (You mentioned size of filter as 3x3x1, but it should be 3x3x20 since the no. of filter channels = no. of input channel)
    Output for this layer : (26-3+1) x (26-3+1) x #filters = 24 x 24 x 40
    

    案例 2(d=2): 同样对于这种情况,两个卷积层的输出将与上面相同,因为输出不依赖于通道数

    卷积层#1

    Input : 28 x 28 x 2, Filter : 3 x 3 x 2, #filters : 20
    So your output becomes (28-3+1) x (28-3+1) X #filters = 26 x 26 x 20
    

    卷积层 #2

    Input : 26 x 26 x 20, Filter : 3 x 3 x 20, #filters : 40
    Output for this layer : (26-3+1) x (26-3+1) x #filters = 24 x 24 x 40
    

    希望这会有所帮助!

    【讨论】:

    • 非常感谢您的回答。我有两个问题,请您澄清一下吗?(1)您能否也提及参数的数量? (2)另外,最大池化层会影响这些数字吗?我已经读过 maxpooling 减少了尺寸,在我的情况下,每个 conv 之后我有 2 个 maxpooling 层。层。每个 maxpooling 的大小为 3,步幅为 2。如果您能解释这两点,您将非常友好。
    【解决方案2】:

    有几个错误。第一个是微不足道的,它大约是第一层输出的大小,因为它应该是26x26x20 而不是25x25x20,因为没有填充的3 的内核大小会让你从每个边缘只丢失一个像素.

    您的推理中更重要的问题发生在您计算第二个卷积层的参数数量时。普通的、通常的卷积还需要您考虑深度:假设您有一个卷积层,其输出特征图为mf_1,...,f_m,输入大小为h*w*d。我们还假设卷积核的空间维度为k*k。然后,任何输出映射中的像素x,例如f_j,将是大小为h*w*d 的输入和大小为k*k*d 的内核之间的3d 卷积的结果。因此,卷积层有k*k*d*m参数。这意味着在您的情况下:

    input of layer: 26x26x20
    number of filters in layer: 40
    number of parameters: 26x26x20x40
    

    关于d=2 的推理也可以这样说:第二个卷积将具有20x40 输出映射,而不是2x40

    【讨论】:

    • 感谢您回答问题的另一部分——参数数量。有点不清楚,请您详细说明这两种情况的每个步骤吗?另外,maxpooling 会影响这些数字吗?我有 2 个 maxpooling 层。在我的例子中,每个 maxpooling 的大小为 3,步幅为 2。
    • @Sm1 Maxpooling 本身没有任何参数。如果将它放在卷积层之间,它将减少第二个卷积中必要参数的数量。我认为让您理解所有这些的最佳方法是通过您正在使用的深度学习框架(例如某种参数()函数)找到参数的数量。请注意,大多数框架默认情况下会在卷积中假设偏差,因此您可能需要一个额外的参数。
    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多