卷积神经网络 (CNN) 输出计算详解
卷积神经网络 (CNN) 输出计算详解
以下代码定义了一个简单的卷积神经网络 (CNN):
class CNN(nn.Module):
def __init__(self, in_channels, out_channels):
super(CNN, self).__init__()
self.conv1 = nn.Conv2d(in_channels, 16, kernel_size=3, stride=1, padding=1)
self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)
self.conv2 = nn.Conv2d(16, out_channels, kernel_size=3, stride=1, padding=1)
def forward(self, x):
print(x.shape)
x = F.relu(self.conv1(x))
x = self.pool(x)
x = F.relu(self.conv2(x))
x = self.pool(x)
return x
该 CNN 的输出计算过程如下:
- 输入数据 x 的形状为 (N, C, H, W),其中 N 是批量大小,C 是通道数,H 和 W 分别是输入图像的高度和宽度。
- 经过第一个卷积层 conv1,输入数据 x 经过 3x3 的卷积核,得到 16 个输出通道的特征图,每个特征图的尺寸为 (H, W)。
- 经过激活函数 ReLU,对卷积层的输出进行非线性映射。
- 经过池化层 pool,对每个特征图进行 2x2 的最大池化操作,将特征图的尺寸缩小一半。
- 经过第二个卷积层 conv2,输入数据经过 3x3 的卷积核,得到 out_channels 个输出通道的特征图,每个特征图的尺寸为 (H/2, W/2)。
- 再次经过激活函数 ReLU,对卷积层的输出进行非线性映射。
- 再次经过池化层 pool,对每个特征图进行 2x2 的最大池化操作,将特征图的尺寸缩小一半。
- 最后的输出是经过池化层后的特征图,形状为 (N, out_channels, H/4, W/4)。
原文地址: https://www.cveoy.top/t/topic/phXV 著作权归作者所有。请勿转载和采集!