pytorch 输入图像尺寸变化时CNN结构的调整

dpiehjr4  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(191)

我正在用pytorch编写一个CNN的颜色分类问题。这是我的CNN的架构:
第一个

tzdcorbm

tzdcorbm1#

实现这一点的一种方法是在展平中间Tensor之前,不管输入分辨率如何,确保空间维度始终相同。例如,通过使用nn.AdaptiveAvgPool2dnn.AdaptiveMaxPool2d。具体示例如下:

class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool1 = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16 * 5 * 5, 5)
        self.pool2 = nn.AdaptiveAvgPool2d((1, 1))  # (B, C, H, W) -> (B, C, 1, 1)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 15)
    def forward(self, x):
        x = self.pool1(F2.relu(self.conv1(x)))
        x = self.pool2(F2.relu(self.conv2(x)))
        x = torch.flatten(x, 1) # flatten all dimensions except batch
        x = F2.relu(self.fc1(x))
        x = F2.relu(self.fc2(x))
        x = self.fc3(x)
        return x

为了补偿由空间分辨率压缩(即池化)引起的信息损失,我们通常需要相应地增加通道大小。

相关问题