基于深度学习框架pytorch搭建卷积神经网络GoogLeNet

pytorch框架

pytorch是Facebook 的 AI 研究团队发布了一个 Python 工具包,它是一个以Python优先的深度学习框架,能够在强大的 GPU 加速基础上实现张量和动态神经网络。PyTorch 的设计思路是线性、直观且易于使用。当你需要执行一行代码时,它会忠实执行。PyTorch 没有异步的世界观。当你打开调试器,或接收到错误代码和 stack trace 时,你会发现理解这些信息是非常轻松的。所以使用 PyTorch 的原因通常有两个

  • 作为 numpy 的替代,以便使用强大的 GPU 加速;
  • 将其作为一个能提供最大灵活性和速度的深度学习研究平台

基于深度学习框架pytorch搭建卷积神经网络GoogLeNet

pytorch深度学习框架

inception 模块

GoogLeNet卷积神经网络是2014 年 ImageNet 比赛的冠军,这是 Google 的研究人员提出的网络结构。它颠覆了传统的卷积神经网络串行连接的方式,使得网络结构发生了巨大的改变,它采用了一种非常有效的 inception 模块

基于深度学习框架pytorch搭建卷积神经网络GoogLeNet

inception 模块

一个 inception 模块的四个并行线路如下

  1. 一个 1 x 1 的卷积,一个小的感受野进行卷积提取特征
  2. 一个 1 x 1 的卷积加上一个 3 x 3 的卷积,1 x 1 的卷积降低输入的特征通道,减少参数计算量,然后接一个 3 x 3 的卷积做一个较大感受野的卷积
  3. 一个 1 x 1 的卷积加上一个 5 x 5 的卷积,作用和第二个一样
  4. 一个 3 x 3 的最大池化加上 1 x 1 的卷积,最大池化改变输入的特征排列,1 x 1 的卷积进行特征提取。最后将四个并行线路得到的特征在通道这个维度上拼接在一起

GoogLeNet卷积神经网络

基于深度学习框架pytorch搭建卷积神经网络GoogLeNet

GooLeNet

我们可以看到GooLeNet卷积神经网络如上图所示,它是由多个inception 模块组合在一起。GooLeNet得到了比 VGG 更深的网络结构,但是却比 VGG 的参数更少,因为其去掉了后面的全连接层,所以参数大大减少,同时有了很高的计算效率。

使用pytorch框架搭建GooLeNet

def conv_relu(in_channel, out_channel, kernel, stride=1, padding=0):
 layer = nn.Sequential(
 nn.Conv2d(in_channel, out_channel, kernel, stride, padding),
 nn.BatchNorm2d(out_channel, eps=1e-3),
 nn.ReLU(True)
 )
 return layer
class inception(nn.Module):
 def __init__(self, in_channel, out1_1, out2_1, out2_3, out3_1, out3_5, out4_1):
 super(inception, self).__init__()
 self.branch1x1 = conv_relu(in_channel, out1_1, 1)
 
 self.branch3x3 = nn.Sequential( 
 conv_relu(in_channel, out2_1, 1),
 conv_relu(out2_1, out2_3, 3, padding=1)
 )
 
 self.branch5x5 = nn.Sequential(
 conv_relu(in_channel, out3_1, 1),
 conv_relu(out3_1, out3_5, 5, padding=2)
 )
 
 self.branch_pool = nn.Sequential(
 nn.MaxPool2d(3, stride=1, padding=1),
 conv_relu(in_channel, out4_1, 1)
 )
 
 def forward(self, x):
 f1 = self.branch1x1(x)
 f2 = self.branch3x3(x)
 f3 = self.branch5x5(x)
 f4 = self.branch_pool(x)
 output = torch.cat((f1, f2, f3, f4), dim=1)
 return output

这就是基于深度学习框架pytorch搭建卷积神经网络GoogLeNet