class ConvBlock(nn.Module):"""基础的卷积模块"""def __init__(self, in_channels, out_channels):super(ConvBlock, self).__init__()self.conv = nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1),nn.BatchNorm2d(out_channels),nn.ReLU(),nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1),nn.BatchNorm2d(out_channels),nn.ReLU())def forward(self, x):return self.conv(x)
示例一:
在这句 encoder1 = ConvBlock(3, 64)
中,意思是:
- 输入是一个 3 通道 的图像(比如 RGB 图像),即输入有 3 个特征图(
in_channels = 3
)。 - 输出有 64 个特征图(
out_channels = 64
),这意味着会有 64 个卷积核,每个卷积核会生成一个新的输出特征图。
卷积核的工作方式:
在计算过程中,有64个卷积核参与运算,当有一个卷积核(深度为3)与三个feature map(因为卷积核的深度与输出的特征图数量一致)进行对应位置相乘并求和得到三个feature map,并再次求和得到一个feature map,那么64个卷积核就会产生64个feature map。
示例二:
在这句 encoder1 = ConvBlock(64, 128)
中,意思是:
在计算过程中,有128个卷积核参与运算,当有一个卷积核(深度为64)与64个feature map(因为卷积核的深度与输出的特征图数量一致)进行对应位置相乘并求和得到64个feature map,并再次求和得到一个feature map,那么128个卷积核就会产生128个feature map。
在这里这里只是从通道的角度来分析一下,先不考虑padding、stride等,即不考虑尺寸,只考虑通道。
图1 一个卷积核(深度为3)与 三个feature map的计算过程图
参考教程:【深度学习 搞笑教程】22 卷积运算过程(单通道 多通道 多卷积核)| 草履虫都能听懂 零基础入门 | 持续更新_哔哩哔哩_bilibili