我正在用pytorch编写一个CNN的颜色分类问题。这是我的CNN的架构:第一个
tzdcorbm1#
实现这一点的一种方法是在展平中间Tensor之前,不管输入分辨率如何,确保空间维度始终相同。例如,通过使用nn.AdaptiveAvgPool2d或nn.AdaptiveMaxPool2d。具体示例如下:
nn.AdaptiveAvgPool2d
nn.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
为了补偿由空间分辨率压缩(即池化)引起的信息损失,我们通常需要相应地增加通道大小。
1条答案
按热度按时间tzdcorbm1#
实现这一点的一种方法是在展平中间Tensor之前,不管输入分辨率如何,确保空间维度始终相同。例如,通过使用
nn.AdaptiveAvgPool2d
或nn.AdaptiveMaxPool2d
。具体示例如下:为了补偿由空间分辨率压缩(即池化)引起的信息损失,我们通常需要相应地增加通道大小。