卷积操作的维度计算是定义神经网络结构的重要问题,在使用如PyTorch、Tensorflow等深度学习框架搭建神经网络的时候,对每一层输入的维度和输出的维度都必须计算准确,否则容易出错,这里将详细说明相关的维度计算。
首先,我们看一下卷积操作涉及的东西,一个卷积操作需要定义卷积核的大小、输入图像的padding长度以及卷积操作的步长。以一个二维输入为例,一个多卷积核操作的示意图如下:
讯享网
这个例子的输入数据是一个三维数据,带有通道数,输入数据第三个维度是通道数,使用了两个卷积核(滤波器)扫描得到两个二维图像(一个卷积核对一个三维数据,即带多个通道的二维数据扫描可以得到一个图像,要求卷积核也是三维,且通道数和输入数据通道数一样),组成输出数据的两个通道。下面我们来描述具体计算。
假设输入数据大小是:
w imes h
其中,w是宽度,h是高度。卷积核大小是:
f imes f
padding的长度是p(padding),步长是s(stride): 那么经过卷积操作之后,输出的数据大小:

lfloorfrac{w + 2p - f}{s} +1 floor imes lfloor frac{h +2p - f }{p} + 1 floor
如果输入的数据是三维数据,即:
w imes h imes c
其中,w是宽度,h是高度,c是通道数(对于RGB图像输入来说,这个值一般是3,在文本处理中,通常是不同embedding模型的个数,如采用腾讯训练的、谷歌训练的等)。
这个时候的卷积核通常也是带通道的三维卷积核:
f imes f imes c
注意,一般来说,卷积核的通道数c和输入数据的通道数是一致的。因此,这个时候卷积之后的输出依然是一个二维数据,其大小为:
lfloor frac{w + 2p - f}{s} +1 floor imes lfloor frac{h +2p - f}{s} + 1 floor
这里的维度做了向下取整,防止结果不是整数的情况。假如希望输出的也是带通道的结果,那么这时候就要使用多个卷积核来操作了,最终输出的数据维度是:
lfloor frac{w + 2p - f }{s} +1 floor imes lfloor frac{h +2p - f}{p} + 1 floor imes c'
其中\(c`\)是卷积核的个数。
二、深度学习框架中Conv1d、Conv2d
在像PyTorch、Tensorflow中,都有类似Conv1d、Conv2d和Conv3d的操作。这也都和卷积操作的维度有关,里面的参数都要定义好。例如如下的卷积操作:

self.convs = nn.Sequential( nn.Conv1d(in_channels=32, out_channels=16, kernel_size=5, stride=1, padding=0), nn.BatchNorm1d(16), nn.ReLU(inplace=True) )
这里面的参数要定义好,否则容易出错。我们将分别介绍。
Conv1d是一维卷积操作,它要求输入的数据是三维的,即:
ext{min batch size} imes ext{in channels number} imes L_{in}
最终输出的参数也是三维的:
ext{min batch size} imes ext{out channels number} imes L_{out}
这里的out_channels定义了将由几个卷积核来扫描,kernel_size则定义了每一个卷积核大小,都可以自有定义。最终,输出的min_batch_size不变,out_channels数量根据定义的参数来,而输出的width计算如下:
lfloor frac{L_{in} + 2p - f}{s} +1 floor
类似的,如果使用Conv2D做卷积操作,那么输入就是四维的:
N imes C_{in} imes H_{in} imes W_{in}
这里的\(N\)是min batch size,\(C_{in}\)是输入数据的通道数,\(H_{in}\)是输入数据的高度,\(W_{in}\)是输入数据的宽度。其输出也是四维的,根据定义的卷积核大小和数量得到的输出维度如下:
N imes C_{out} imes H_{out} imes W_{out}
其中,\(C_{out}\)是根据卷积核的数量定义的输出数据的通道数,因为一个卷积核只能扫描得到一个二维图。其中\(H_{out}\)和\(W_{out}\)的计算如下:
H_{out} = lfloor frac{H_{in} + 2p - f}{s} +1 floor
W_{out} = lfloor frac{W_{in} + 2p - f}{s} +1 floor
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/156892.html