基于深度学习框架pytorch搭建卷积神经网络GoogLeNet
pytorch框架
pytorch是Facebook 的 AI 研究团队发布了一个 Python 工具包,它是一个以Python优先的深度学习框架,能够在强大的 GPU 加速基础上实现张量和动态神经网络。PyTorch 的设计思路是线性、直观且易于使用。当你需要执行一行代码时,它会忠实执行。PyTorch 没有异步的世界观。当你打开调试器,或接收到错误代码和 stack trace 时,你会发现理解这些信息是非常轻松的。所以使用 PyTorch 的原因通常有两个:
- 作为 numpy 的替代,以便使用强大的 GPU 加速;
- 将其作为一个能提供最大灵活性和速度的深度学习研究平台
pytorch深度学习框架
inception 模块
GoogLeNet卷积神经网络是2014 年 ImageNet 比赛的冠军,这是 Google 的研究人员提出的网络结构。它颠覆了传统的卷积神经网络串行连接的方式,使得网络结构发生了巨大的改变,它采用了一种非常有效的 inception 模块。
inception 模块
一个 inception 模块的四个并行线路如下:
- 一个 1 x 1 的卷积,一个小的感受野进行卷积提取特征
- 一个 1 x 1 的卷积加上一个 3 x 3 的卷积,1 x 1 的卷积降低输入的特征通道,减少参数计算量,然后接一个 3 x 3 的卷积做一个较大感受野的卷积
- 一个 1 x 1 的卷积加上一个 5 x 5 的卷积,作用和第二个一样
- 一个 3 x 3 的最大池化加上 1 x 1 的卷积,最大池化改变输入的特征排列,1 x 1 的卷积进行特征提取。最后将四个并行线路得到的特征在通道这个维度上拼接在一起
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
相关推荐
kalakalayang 2019-06-28