一、卷积层的定义
卷积层是卷积神经网络的基本组成之一,主要作用是用于提取图像特征。
1.卷积操作的原理
卷积操作是一种数学运算,用于两个函数之间的积分。对于图像处理,卷积操作通常表示为对输入图像与滤波器(也称为卷积核或kernel)进行点积运算。卷积核是一个较小的矩阵,通过滑动窗口的方式在输入图像上移动,计算每个位置的点积,从而生成特征图(feature map)。
Pytorch中的Tensor通道排列顺序是:[batch, channel, height, width]
2.卷积操作的一些基本概念
卷积核(Kernel)
也被叫做滤波器(filter),假设卷积核的高和宽分别为𝑘ℎ和𝑘𝑤,则将称为𝑘ℎ×𝑘𝑤卷积,比如3×3卷积,就是指卷积核的高为3, 宽为3。卷积核中数值为对图像中与卷积核同样大小的子块像素点进行卷积计算时所采用的权重。
填充(Padding)
填充(Padding)是在卷积神经网络(CNN)中为输入张量的边缘添加额外的像素,以控制输出特征图的大小并保持输入图像的空间尺寸。填充有助于保留输入图像边缘的信息,并在卷积运算中避免空间尺寸的过度缩小。
步长(Stride)
步长(Stride)是卷积操作中的一个参数,决定了卷积核在输入图像上滑动的步幅。具体来说,步长定义了卷积核每次滑动的距离。它控制了卷积运算中卷积核在输入图像上移动的距离,从而影响输出特征图的大小。
卷积层输出特征图的尺寸计算
其中,H为输出特征图的高度和宽度(假设输入为正方形图像),W为输入图像的高度和宽度,F为卷积核大小,P为填充,S为步长。
注:当输出图像的尺寸计算公式得到的结果为非整数时,在 PyTorch 中,通常会将其向下取整(取floor),以确保输出图像的尺寸为整数。
import torch
import torch.nn as nn
# 输入张量
input_tensor = torch.randn(1, 3, 7, 7) # (batch_size, channels, height, width)
# 定义卷积层,步长为2,卷积核大小为2x2,填充为1
conv_layer = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=2, stride=2, padding=1