深度学习——含并行连接的网络(GoogLeNet)笔记

news2024/11/17 5:40:55

GoogLeNet中基本的卷积块是Inception块。

1.Inception块:4个路径从不同的层面抽取信息,然后在输出通道合并

①1*1的卷积层,减少通道数,降低模型的复杂度

② 1*1的卷积层,减少通道数,降低模型复杂度。然后使用3*3的卷积层提取信息,输出

③1*1的卷积层,减少通道数,降低模型复杂度。然后使用5*5的提取信息卷积层,输出

④3*3的最大池化层,然后1*1卷积层

通过padding最后4条路径的输出的尺寸都一样,然后进行合并。

2.Inception块的通道数:通道数是个超参数

 白色框是1*1的卷积是通过降低通道数来控制模型的复杂度

蓝色框的卷积是提取信息的

3.Inception块的优点

跟单3*3卷积层或者5*5卷积层相比,Inception块的参数个数少和计算复杂度低。

 4.GoogLeNet的架构:有5段,9个Inception块

 

【总结】

①Inception块用4条有不同超参数的卷积层和池化层的路来抽取不同的信息,优点是模型参数小,计算复杂度低

②GoogleNet使用了9个Inception块,是第一个达到上百层的网络

【代码实现】

import torch
from torch import nn
from torch.nn import functional as F
from d2l import torch as d2l


# Inception块
class Inception(nn.Module):
    def __init__(self, in_channels, c1, c2, c3, c4, **kwargs):
        super(Inception, self).__init__(**kwargs)  # **kwargs是将除了前面显式参数外的其他参数
        # 线路1 单层1*1卷积层
        self.p1_1 = nn.Conv2d(in_channels, c1, kernel_size=1)
        # 线路2 1*1卷积层后按3*3卷积层
        self.p2_1 = nn.Conv2d(in_channels, c2[0], kernel_size=1)
        self.p2_2 = nn.Conv2d(c2[0], c2[1], kernel_size=3, padding=1)
        # 线路3 1*1卷积后按5*5卷积
        self.p3_1 = nn.Conv2d(in_channels, c3[0], kernel_size=1)
        self.p3_2 = nn.Conv2d(c3[0], c3[1], kernel_size=5, padding=2)
        # 线路4 3*3最大池化层后按1*1卷积层
        self.p4_1 = nn.MaxPool2d(kernel_size=3, stride=1, padding=1)
        self.p4_2 = nn.Conv2d(in_channels, c4, kernel_size=1)

    def forward(self, x):
        p1 = F.relu(self.p1_1(x))
        p2 = F.relu(self.p2_2(F.relu(self.p2_1(x))))
        p3 = F.relu(self.p3_2(F.relu(self.p3_1(x))))
        p4 = F.relu(self.p4_2(self.p4_1(x)))
        # 通道维度上连结输出
        return torch.cat((p1, p2, p3, p4), dim=1)


# GoogLeNet模型搭建
# 第一个模块使用64个通道,7*7卷积层
b1 = nn.Sequential(nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3),
                   nn.ReLU(),
                   nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
                   )
# 第二个模块是使用 第一个卷积层是64个通道 1*1  第二个卷积层是192个通道 3*3
b2 = nn.Sequential(nn.Conv2d(64, 64, kernel_size=1),
                   nn.ReLU(),
                   nn.Conv2d(64, 192, kernel_size=3, padding=1),
                   nn.ReLU(),
                   nn.MaxPool2d(kernel_size=3, stride=2, padding=1))
# 第三个模块是 2个Inception块
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))
# 第四个模块是 5个Inception块
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))
# 第五个模块是 2个Inception块
b5 = nn.Sequential(Inception(832, 256, (160, 320), (32, 128), 128),
                   Inception(832, 384, (192, 384), (48, 128), 128),
                   nn.AdaptiveAvgPool2d((1,1)),
                   nn.Flatten())

# 网络搭建
net = nn.Sequential(b1, b2, b3, b4, b5, nn.Linear(1024, 10))
# 模型测试
X = torch.rand(size=(1, 1, 96, 96))
for layer in net:
    X = layer(X)
    print(layer.__class__.__name__,'output shape:\t', X.shape)
# 模型训练
lr, num_epochs, batch_size = 0.1, 10, 128
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=96)
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())
d2l.plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

volatile关键字和synchronized关键字

参考博客:https://www.cnblogs.com/cg-ww/p/14540450.html 1、volatile的作用:关键作用是使变量在多个线程之间可见 程序并没有因为我修改之后结束运行,因为线程对共享变量具有不可见性,main线程修改布尔值之后,子线…

【读点论文】MicroNet: Towards Image Recognition with Extremely Low FLOPs,在极高限制下的轻量化网络

MicroNet: Towards Image Recognition with Extremely Low FLOPs Abstract 这篇论文旨在以极低的计算成本解决性能大幅下降的问题。提出了微分解卷积,将卷积矩阵分解为低秩矩阵,将稀疏连接整合到卷积中。 提出了一个新的动态激活函数-- Dynamic Shift …

精准管控 | AIRIOT数字油库智能化解决方案

在油库管理的过程中,储油罐区普遍存在分布空间范围广、安全防爆要求高、监控点多、布线复杂、自动化系统集成难度大等问题,传统的油库管理手段相对落后、管理环境复杂,企业在监测监控、设备设施管理、日常运行等方面存在诸多难点:…

Openldap2.5.13编译安装

Openldap2.5.13编译安装 本篇文章没有很全面,采用的是编译安装,yum安装参考我的另外一篇文章 一、准备 openssl-1.1.1.tar.gz 下载地址:https://ftp.openssl.org/source/old/1.1.1/openssl-1.1.1.tar.gz openldap-2.5.13.tgz 下载地址&#…

APS计划排产软件在仪器仪表行业的应用

仪器仪表是指用以产生、测量精密量的设备和装置,包括对精密量的观察、监视、测定、验证、记录、传输、变换、显示、分析处理与控制。仪器仪表是仪器仪表的一个重要分支。伴随国家出台政策大力发展精密仪器仪表下游行业,下游应用领域对精密仪器仪表的需求…

React 学习笔记:组件生命周期

组件生命周期 生命周期一个事物从创建到最后消亡经历的过程,在这个过程中会有不同的状态(新生儿、少年),所以在 16.8 版本以前生命周期只有类组件才有,函数组件是没有这个概念的,因为它没有状态&#xff0…

Diffusion-LM Improves Controllable Text Generation 扩散语言模型改善可控文本生成

论文链接:https://arxiv.org/abs/2205.14217 代码链接:https://github.com/XiangLi1999/Diffusion-LM 一、简介 无需重训模型控制语言模型的表现是自然语言生成(NLG)的一个重要开放问题,近期工作已经在简单句子属性控…

解读小红书2022年母婴行业报告:心智种草的流量密码

母婴用户代际更迭,90后晋升为母婴消费主力军。新一代宝爸宝妈的关注点在哪里?品牌该如何通过小红书满足ta们的进阶需求,为母婴消费注入新活力? 本文将解读小红书官方发布的《2022年母婴行业人群洞察报告》,基于上千名用…

Ubuntu20运行SegNeXt代码提取道路水体(二)——SegNeXt源代码安装到测试环境配置全过程摸索

首先我们在第一篇里面已经下载了SegNeXt代码 打开源代码 查看readme文件 我们先安装一下里面提到的torchprofile 链接在这 其实只要这个语句就能安装 pip install torchprofile这一步没什么问题 很顺利 接下来继续按照他的教程走 我们在(一)已经安装了…

快手小程序怎么开发

快手小程序开发很简单,直接找一个快手小程序开发平台就可以。 大家可以按照下面这个步骤去完成,完成后就能开发出一个快手小程序啦。 操作像玩消消乐那么简单! 不过在开发快手小程序前,需要先检查以下这几样东西有没有准备好&a…

小白学流程引擎-FLowable(五) — BPMN2.0模型规范

前言: 不用到处百度BPMN2的博客了,本篇文章带你系统掌握BPMN2规范的核心知识点。全文2万字,全覆盖BPMN2知识点,图文并茂,泡杯咖啡,慢慢细品~ 一、BPMN是什么 BPMN(Business Proces…

ChatGPT的理解

参考 李宏毅老师讲解 思维导图 ChatGPT 对标 instruct GPT 本质 GPT的社会化 训练过程 1 学习文字接龙 无监督学习 大量的自我学习 生成的答案具有随机性 自己修炼 2 人类老师引导文字接龙的方向 监督学习 标注:(问题提示,答案)对,引导gpt生…

10万字208道Java经典面试题总结(附答案)一

11、String 类的常用方法都有那些? equals、length、contains、replace、split、hashcode、indexof、substring、trim、toUpperCase、toLowerCase、isEmpty等等。 12、普通类和抽象类有哪些区别? 抽象类不能被实例化; 抽象类可以有抽象方法&…

分享米筐量化的使用方法

米筐量化都是量化金融分析经常会用到的数据提供平台,今天主要是来讲一下关于米筐量化的使用方法: 基本操作: 在这里把tushare和rqdatac是import为ts和rq,这import as会对之后的缩写产生影响。 例如: rq.get_price(o…

Docker网络模式

目录 网络模式 bridge模式(默认模式) host模式(仅主机模式) 初识网络模式 查看桥接模式 查看仅主机模式的特点 host模式 自定义网络 数据卷挂载tomcat 4.2自定义网络 网络模式 bridge模式(默认模式) docker run时使用–netbridge,这…

MySQL RR级别下,什么场景会产生不可重复读、幻读?

1 背景 最近在复习MySQL相关知识,忽然想到MVCC真的能完全解决不可重复读、幻读问题吗?于是做了下述测试。 2 准备环境 MySQL版本: ➜ ~ mysql --version mysql Ver 8.0.31 for macos12 on x86_64 (MySQL Community Server - GPL)MySQL隔…

Python学习-8.2.2 库(wordcloud库的基础与实例)

第三方库的介绍及安装方式见::Python学习-8.库(第三方库介绍与下载安装) wordcloud库概述 词云概念 是由词汇组成类似云的彩色图形,可以过滤掉大量的文本信息,使读者只要一眼扫过文本就可以领略文本的主旨…

风控并行组合模型及其额度定价场景实践

昨天,我们分享过一篇文章《串行组合模型及信用评估场景实践》,里边详细介绍了串行组合模型的原理逻辑,以及在信用风险评估场景的具体实现过程。同时,从模型串联数量、排列顺序等多个维度验证了串行组合模型的合理性与有效性&#…

区块链赋能的6G零信任车联网可信接入方案

(一)文章素材摘录于 单位信息|广东工业大学北京邮电 郝敏博士团队 数据来源|电子与信息学报 基金项目|国家重点研发计划 (二)正文 随着三大运营商 5G 套餐于2019年底的相继上线,宣…

【C语言程序设计】实验 6

目录 1. 无理数e 2. 平面镜反数 3. 整数分解质因数 4. 素数回文 5. 阶乘和数 6. 输出星号图案 7. 验证哥德巴赫猜想 1. 无理数e 【问题描述】输入一个正整数&#xff0c;由下式e11/1!1/2!...1/n!求无理数e&#xff0c;保留9位小数。 【输入形式】一个正整数n(<…