原理

一共有四种卷积通道,它的输入层的特征图都是同一个,唯一不同的就是中间经历不同的卷积层。

该结构采用了四个分支,每个分支分别由1x1卷积、3x3卷积、5x5卷积和3x3maxpooling组成,既增加了网络的宽度,也增加了网络对不同尺度的适用性。

四个分支输出后在通道维度上进行叠加,作为下一层的输入。

四个分支输出的featuremap的尺寸可由padding的大小进行控制,以保证它们的特征维度相同(不考虑通道数)

每进过一次inception模块大小变为原来的二分之一 尺寸大小的计算公式是 (n+2p+1-k)/s

代码实现

# 一共有四种卷积通道,它的输入层的特征图都是同一个,唯一不同的就是中间经历不同的卷积层。
# 该结构采用了四个分支,每个分支分别由1x1卷积、3x3卷积、5x5卷积和3x3maxpooling组成,既增加了网络的宽度,也增加了网络对不同尺度的适用性。
# 四个分支输出后在通道维度上进行叠加,作为下一层的输入。
# 四个分支输出的featuremap的尺寸可由padding的大小进行控制,以保证它们的特征维度相同(不考虑通道数)
# 每进过一次inception模块大小变为原来的二分之一 尺寸大小的计算公式是 (n+2p+1-k)/sfrom ast import In
from numpy import pad
import torch
import torch.nn as nn
import torch.nn.functional as Fclass GlobalAvgPool2d(nn.Module): # 全局平均池化层def __init__(self):super().__init__()def forward(self,x):return F.avg_pool2d(x, kernel_size = x.size()[2:]) # 将池化窗口形状设置成输入的高和宽实现[2:]class Inception(nn.Module): # Inception block 块def __init__(self, in_c, c1, c2, c3, c4):super().__init__()self.p1 = nn.Sequential(nn.Conv2d(in_c, c1, kernel_size=1),nn.ReLU())self.p2 = nn.Sequential(nn.Conv2d(in_c, c2[0], kernel_size=1),nn.ReLU(),nn.Conv2d(c2[0], c2[1], kernel_size=3, padding=1),nn.ReLU())self.p3 = nn.Sequential(nn.Conv2d(in_c, c3[0], kernel_size=1),nn.ReLU(),nn.Conv2d(c3[0], c3[1], kernel_size=5, padding=1),nn.ReLU())self.p4 = nn.Sequential(nn.MaxPool2d(kernel_size=3, stride=1, padding=1),nn.Conv2d(in_c, 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)class GoogLeNet(nn.Module): # GoogLeNet类def __init__(self):super().__init__()self.b1 = nn.Sequential(nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3),nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))self.b2 = nn.Sequential(nn.Conv2d(64, 64, kernel_size=1),nn.Conv2d(64, 192, kernel_size=3, padding=1),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))self.b3 = nn.Sequential(Inception(192, 64, (96,128), (16,32), 32),Inception(256, 128, (128,192), (32,96), 64),nn.MaxPool2d(kernel_size=3, stride=2, padding=1)) self.b4 = nn.Sequential(Inception(480, 192, (96,208), (16,48), 64),Inception(512, 160, (112,224), (24,64), 64),Inception(512, 128, (128,256), (24,64), 64),Inception(512, 112, (144,288), (32,64), 64),Inception(528, 256, (160,320), (32,128), 128),nn.MaxPool2d(kernel_size=3, stride=2, padding=1) # 每个padding都是根据kernel_size和stride自己算出来然后设置的)self.b5 = nn.Sequential(Inception(832, 256, (160,320), (32,128), 128),Inception(832, 384, (192,384), (48,128), 128),GlobalAvgPool2d() # 全局平均池化)self.feature = nn.Sequential(self.b1, self.b2, self.b3, self.b4, self.b5)self.fc = nn.Sequential(nn.Linear(1024, 10)) # 这里使用的图像大小为 224*224 计算得知最后为1024def forward(self, x):x = self.feature(x)x = x.view(x.size(0), -1) # 进fc前要在size(0)维度展开x = self.fc(x)return xclass Unit(nn.Module): # 一个单独的单元,用来计算输出大小,测试def __init__(self, in_channels, out_channels):super().__init__()self.conv =nn.Conv2d(in_channels=in_channels, out_channels=out_channels,kernel_size=7,stride=2,padding=3)self.bn = nn.BatchNorm2d(num_features=out_channels)self.relu = nn.ReLU()self.pool = nn.MaxPool2d(3, 2, 1) # kernel_size, stride, paddingdef forward(self, input):output = self.conv(input)output = self.bn(output)output = self.relu(output)output = self.pool(output)return output
class A(nn.Module): # 一个单独的单元,用来计算输出大小,测试def __init__(self, num_classes=2):super().__init__()self.unit1 = Unit(3, 64)self.net = nn.Sequential(self.unit1)def forward(self, input):output = self.net(input)return outputif __name__ == '__main__':net = GoogLeNet()x = torch.rand(1, 3, 224, 224)for name,unit in net.named_children():x = unit(x)print(name, 'output shape:', x.shape)

参考文章:

pytorch 实现inception 最简单上手的写法_视觉盛宴的博客-CSDN博客_inception pytorch

大话CNN经典模型:GoogLeNet(从Inception v1到v4的演进) - 雪饼的个人空间 - OSCHINA - 中文开源技术交流社区

经典神经网络 -- GoogLeNet / Inception : 设计原理与pytorch实现相关推荐

  1. PrivacyIN Week2 | 张宇鹏博导开讲经典零知识证明协议设计原理

    前言 隐私研究院[PrivacyIN]第一期ZK训练营课程精讲内容上线,本期课堂邀请到美国德州农工大学(Texas A&M University)计算机科学与工程学院的助理教授张宇鹏,主要介绍 ...

  2. 深度学习卷积神经网络——经典网络GoogLeNet(Inception V3)网络的搭建与实现

    一.Inception网络(google公司)--GoogLeNet网络的综述 获得高质量模型最保险的做法就是增加模型的深度(层数)或者是其宽度(层核或者神经元数), 但是这里一般设计思路的情况下会出 ...

  3. inception v4 官方实现_经典神经网络 | 从Inception v1到Inception v4全解析

    本文介绍了 Inception 家族的主要成员,包括 Inception v1.Inception v2 .Inception v3.Inception v4 和 Inception-ResNet.它 ...

  4. 经典神经网络 | 从Inception v1到Inception v4全解析

    本文介绍了 Inception 家族的主要成员,包括 Inception v1.Inception v2 .Inception v3.Inception v4 和 Inception-ResNet.它 ...

  5. 卷积神经网络原理_怎样设计最优的卷积神经网络架构?| NAS原理剖析

    虽然,深度学习在近几年发展迅速.但是,关于如何才能设计出最优的卷积神经网络架构这个问题仍在处于探索阶段. 其中一大部分原因是因为当前那些取得成功的神经网络的架构设计原理仍然是一个黑盒.虽然我们有着关于 ...

  6. Pytorch之经典神经网络CNN(七) —— GoogLeNet(InceptionV1)(Bottleneck)(全局平均池化GAP)(1*1卷积)(多尺度)(flower花卉数据集)

    2014年 Google提出的 是和VGG同年出现的,在ILSVRC(ImageNet) 2014中获得冠军,vgg屈居第二 GoogLeNet也称Inception V1.之所以叫GoogLeNet ...

  7. 经典神经网络论文超详细解读(三)——GoogLeNet InceptionV1学习笔记(翻译+精读+代码复现)

    前言 在上一期中介绍了VGG,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而今天要介绍的就是同年分类任务的第一名--GoogLeNet . 作为2014年Ima ...

  8. 《不只是美:信息图表设计原理与经典案例》—— 2.5 功能限制形式

    本节书摘来异步社区<不只是美:信息图表设计原理与经典案例>一书中的第2章,第2.5节,作者:[美]Alberto Cairo,更多章节内容可以访问云栖社区"异步社区"公 ...

  9. 《不只是美:信息图表设计原理与经典案例》—— 第2章 形式与功能:可视是一种技术...

    本节书摘来异步社区<不只是美:信息图表设计原理与经典案例>一书中的第2章,作者:[美]Alberto Cairo,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  10. Pytorch:卷积神经网络-GoogLeNet

    Pytorch: 含并行连结的网络-GoogLeNet Copyright: Jingmin Wei, Pattern Recognition and Intelligent System, Scho ...

最新文章

  1. 泛型中? super T和? extends T的区别
  2. 转:AIX 5L 内存性能优化
  3. Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)
  4. XML文件与实体类的互相转换
  5. Sublime Text 3 插件安装
  6. Python 装饰器详解(下)
  7. 精度优秀,速度214.7 fps !卡内基梅隆大学开源强大的3D多目标跟踪系统
  8. Redis(3-3):列表类型
  9. php绕过漏洞的函数,PHP中有漏洞的函数总结
  10. 【java】统计英文文本中某些字母出现的次数
  11. 手机上有没有学python的软件-哪个手机软件有python题库
  12. Mysql及SQLyog安装教程
  13. Synergy让一个鼠标一个键盘操作多台电脑
  14. Aruba无线AP入坑心得
  15. APM —全链路追踪
  16. UC浏览器下载的视频有k0或key.key或者0.key文件 破解加密将零散的视频合并一个mp4
  17. nodejs+vue+elementui手办多商家商城交易平台
  18. 无人机任务分配 matlab,Multi-UAV Task Assignment Benchmark
  19. 使用Charles做弱网测试入门篇
  20. 苹果电脑macos Ventura 13.0(22A380)dmg原版引导版镜像下载

热门文章

  1. DataFactory插入MySQL中文乱码问题
  2. IIS经典模式和集成模式的区别
  3. 使用IdleTest进行TDD单元测试驱动开发演练(3) 之 ASP.NET MVC
  4. 车间调度建模系列5|扩展析取图之工序间物流周转时间
  5. 深度强化学习- 最全深度强化学习资料
  6. 【Research Paper】
  7. Python 编写规范
  8. 【python】多进程小结
  9. Arcgis自带数据地址
  10. php . 和..,?php?和??