在学习卷积神经网时候,本人对代码中的卷积维度变化不是很理解,记录学习过程供参考。
另外,巻积核的参数 输入通道数,即输入数据的通道数,输出通道数也就是巻积核个数,尺寸一般奇数 1x1 3x3 一般有pad输出前后大小不变。
假设有一个卷积核W(3X3X3X2),第一个维度为高度,第二个维度为宽度,第三个维度为通道数,第四个维度为卷积层数。上图展示一下:
在这里插入图片描述
关于卷积过程中维度的变化:
三维的巻积核对图像操作,得到的还是二维平面,如果处理的图是三维的
对于单通道的灰度图卷积很好理解,如4X4的图片用3X3的一个卷积核进行卷积(步长为一),那结果就是2X2的维度;假设卷积核有2层,即为3X3X2,那么卷积出来的结果就是2X2X2。结果的维度就相当于拿卷积核这个“面”在图像里平移,看有多少个这样的“面”。
对于多通道而言,借用上面思维来理解就清晰了,如6X6X3的RGB图片,用3X3X3的卷积核来卷积(同样步长为一),就相当于拿一个3X3X3的正方体(卷积核)在6X6X3的长方体里平移(原图像),得出的结果就是二维的4X4,因为卷积核只需要在图片的第一和第二维平移,第三维度相等无需移动。此时如果卷积核层数为2,即3X3X3X2,那么结果就相当于有两层4X4的结果,即4X4X2。以此类推。
借用网上的图帮助理解:
在这里插入图片描述
BatchNorm:
随机选取了Batch进行Normalization, 为了防止过拟合而使用。3d操作就算将4维数据组成的5维操作,但是数据的维度是不变化的,因为没有像巻积操作嘛
dilated convolution
空洞巻积,即膨胀巻积,它的感受野可以设置的比普通巻积大,代码实例如下,即dilation的不同,如果设置为1就是普通巻积
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
attention:
计算出了attention map然后再和这个特征相乘,就是经过attention处理的特征