Math 卡在CNN矩阵大小的计算中
在我的CNN二进制分类体系结构中,我有2个卷积层、2个maxpooling层、2个batchnormalization操作、1个RELu和1个fullyconnected层 Case1:当通道数Math 卡在CNN矩阵大小的计算中,math,deep-learning,classification,conv-neural-network,Math,Deep Learning,Classification,Conv Neural Network,在我的CNN二进制分类体系结构中,我有2个卷积层、2个maxpooling层、2个batchnormalization操作、1个RELu和1个fullyconnected层 Case1:当通道数d=1:在第一层中,输入大小[28*28*d],d=1通道与M\u 1=20应用于所有输入通道的滤波器数(f_h x f\u w x d)=[3x 3x1创建大小为{(h-f_h+1)x(w-f_w+1)x d x M_1}=(28-3+1)x(28-3+1)x1x20=[25x25x20] 第二个卷积层
d=1
:在第一层中,输入大小[28*28*d]
,d=1
通道与M\u 1=20
应用于所有输入通道的滤波器数(f_h x f\u w x d)=[3x 3x1创建大小为{(h-f_h+1)x(w-f_w+1)x d x M_1}
=(28-3+1)x(28-3+1)x1x20=[25x25x20]
第二个卷积层包含两倍数量的相同大小的过滤器=40。因此,作为第二卷积层的输出,参数的数量变为[23*23*1*40]
。因此,参数总数=[25x25x20]+[23*23*40]
情况2:当d=2
和所有其他尺寸相同时。过滤器大小变为[3 x 3 x 2]
。第一个卷积层的输出将包含:(28-3+1)x(28-3+1)x2x20=[25x25x40]
对于第二个卷积层,输出将包含[23 x 23 x 2 x 40]
参数
问题)我对上述每种情况的计算是否正确?全连接层的输入是什么?在卷积层中,滤波器中的通道数保持等于输入的通道数。此外,滤波器中通道的数量不会影响输出的大小。输出的大小由以下公式给出:
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
上述输出将成为第二个卷积层的输入,这将导致:
转换层#2
案例2(d=2):
在这种情况下,两个conv层的输出也将与上述相同,因为输出不依赖于通道的数量
转换层#1
转换层#2
希望这有帮助 有几个错误。第一个是微不足道的,它与第一层的输出大小有关,因为它应该是26x26x20
而不是25x25x20
,因为如果内核大小为3
,而不加填充,则会使每个边缘仅丢失一个像素
推理中更重要的问题发生在计算第二个卷积层的参数数量时。普通的卷积要求你也要考虑深度:假设你有一个卷积层,有<代码> M< /代码>输出特征图<代码> fy1,…,fym 和大小<代码> 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
非常感谢你的回答。我有两个问题,你能澄清一下吗?(1)你能同时提到参数的数量吗?(2) 此外,拥有maxpooling层是否会影响这些数字?我已经读到maxpooling降低了维度,在我的例子中,在每个conv.层之后有2个maxpooling层。每个MaxPool的大小为3,步幅为2。如果你能解释这两点,我将不胜感激。谢谢你回答问题的另一部分——参数的数量。有点不清楚,你能详细说明这两个案例的每个步骤吗?另外,maxpooling会影响这些数字吗?我有两个maxpooling层。在我的例子中,每个maxpooling的大小为3,跨步为2。@Sm1 maxpooling本身没有任何参数。如果将其放置在卷积层之间,将减少第二次卷积中必要参数的数量。我认为对你来说,理解所有这些的最好方法是通过你正在使用的深度学习框架(例如,某种类型的parameters()函数)找到参数的数量。请注意,大多数框架在卷积中默认情况下都会假定有偏差,因此您可能有一个额外的参数。
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
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
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
input of layer: 26x26x20
number of filters in layer: 40
number of parameters: 26x26x20x40