前言
在2014年的ImageNet图像识别挑战赛中,一个名叫GoogLeNet (Szegedy et al., 2015)的网络架构大放异彩。 GoogLeNet吸收了NiN中串联网络的思想,并在此基础上做了改进。 这篇论文的一个重点是解决了什么样大小的卷积核最合适的问题。
卷积核的选择问题:小孩子才做选择题;
- Inception的卷积核选择和GoogLeNet的框架模型:
Inception模型代码:
class Inception(nn.Module):
def __init__(self, in_channels, c1, c2, c3, c4, **kwargs) -> None:
super().__init__(**kwargs)
self.p1 = nn.Sequential(
nn.Conv2d(in_channels, c1, kernel_size=1),
nn.ReLU()
)
self.p2 = nn.Sqeuential(
nn.Conv2d(in_channels, c2[0], kernel_size=1),
nn.Conv2d(c2[0], c2[1], kernel_size=3, padding=1),
nn.ReLU()
)
self.p3 = nn.Sequential(
nn.Conv2d(in_channels, c3[0], kernel_size=1),
nn.Conv2d(c3[0], c3[1], kernel_size=5, padding=2),
nn.ReLU()
)
self.p4 = nn.Sequential(
nn.MaxPool2d(kernel_size=3, stride=1, padding=1),
nn.Conv2d(in_channels, c4, kernel_size=1),
nn.ReLU()
)
def forward(self, X):
p1 = self.p1(X)
p2 = self.p2(X)
p3 = self.p3(X)
p4 = self.p4(X)
return torch.cat((p1, p2, p3, p4), dim=1)
note:模型能被训练,钞能力很强大!
Ref:李沐