动手学深度学习(Pytorch版)代码实践 -卷积神经网络-27含并行连结的网络GoogLeNet

27含并行连结的网络GoogLeNet

在这里插入图片描述
在这里插入图片描述

import torch
from torch import nn
from torch.nn import functional as F
import liliPytorch as lp
import matplotlib.pyplot as plt

class Inception(nn.Module):
    # c1--c4是每条路径的输出通道数
    def __init__(self, in_channels, c1, c2, c3, c4, **kwargs):
        super().__init__()
        # super(Inception, self).__init__(**kwargs)
        # 线路1,单1x1卷积层
        self.p1_1 = nn.Conv2d(in_channels, c1, kernel_size=1)
        # 线路2,1x1卷积层后接3x3卷积层
        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,1x1卷积层后接5x5卷积层
        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,3x3最大汇聚层后接1x1卷积层
        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):
        # 经过每条路径,并应用 ReLU 激活函数
        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)

# 定义模型的各个模块
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)      # 最大汇聚层
)

b2 = nn.Sequential(
    nn.Conv2d(64, 64, kernel_size=1),                     # 1x1卷积层
    nn.ReLU(),                                            # 激活函数
    nn.Conv2d(64, 192, kernel_size=3, padding=1),         # 3x3卷积层
    nn.ReLU(),                                            # 激活函数
    nn.MaxPool2d(kernel_size=3, stride=2, padding=1)      # 最大汇聚层
)

b3 = nn.Sequential(
    Inception(192, 64, (96, 128), (16, 32), 32),          # 第一个Inception块
    Inception(256, 128, (128, 192), (32, 96), 64),        # 第二个Inception块
    nn.MaxPool2d(kernel_size=3, stride=2, padding=1)      # 最大汇聚层
)

b4 = nn.Sequential(
    Inception(480, 192, (96, 208), (16, 48), 64),         # 第一个Inception块
    Inception(512, 160, (112, 224), (24, 64), 64),        # 第二个Inception块
    Inception(512, 128, (128, 256), (24, 64), 64),        # 第三个Inception块
    Inception(512, 112, (144, 288), (32, 64), 64),        # 第四个Inception块
    Inception(528, 256, (160, 320), (32, 128), 128),      # 第五个Inception块
    nn.MaxPool2d(kernel_size=3, stride=2, padding=1)      # 最大汇聚层
)

b5 = nn.Sequential(
    Inception(832, 256, (160, 320), (32, 128), 128),      # 第一个Inception块
    Inception(832, 384, (192, 384), (48, 128), 128),      # 第二个Inception块
    nn.AdaptiveAvgPool2d((1, 1)),                         # 自适应平均汇聚层
    nn.Flatten()                                          # 展平层
)

# 将所有模块串联成一个完整的模型
net = nn.Sequential(
    b1,      # 第一模块
    b2,      # 第二模块
    b3,      # 第三模块
    b4,      # 第四模块
    b5,      # 第五模块
    nn.Linear(1024, 10)  # 最后一层全连接层,输出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 = lp.loda_data_fashion_mnist(batch_size, resize=96)
# 训练模型
lp.train_ch6(net, train_iter, test_iter, num_epochs, lr, lp.try_gpu())
# 显示训练过程中的图表
plt.show()

# 训练结果:
# 损失 0.254, 训练准确率 0.904, 测试准确率 0.866
# 1534.2 examples/sec on cuda:0

# loss 0.246, train acc 0.906, test acc 0.891
# 1492.9 examples/sec on cuda:0

运行效果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JDK19特性

JDK19特性 一、JAVA19概述 JDK 19 2022 年 9 月 20 日正式发布以供生产使用,非长期支持版本。不过,JDK 19 中有一些比较重要的新特性值得关注。 JDK 19 只有 7 个新特性: JEP 405: Record Patterns(记录模式)[1] (预览)JEP 422: Linux/RISC-V Port[2]JEP 424: Foreign …

Eclipse快捷键大全

CtrlK 参照选中的Word快速定位到下一个 CtrlE 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示) Ctrl/(小键盘) 折叠当前类中的所有代码 Ctrl(小键盘) 展开当前类中的所有代码 CtrlSpace 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的…

Open WebUI – 本地化部署大模型仿照 ChatGPT用户界面

Open WebUI介绍: Open WebUI 是一个仿照 ChatGPT 界面,为本地大语言模型提供图形化界面的开源项目,可以非常方便的调试、调用本地模型。你能用它连接你在本地的大语言模型(包括 Ollama 和 OpenAI 兼容的 API)&#xf…

牛顿迭代法(求解整数的近似平方根)

情景再现 面试官:给你一个整数怎样最快求解他的近似平方根? 小白:可以用while循环呀! 面试官:有没有更好的方法? 小白:可以从这个数的左右两边开始迭代。 面试官:除了这个呢&#xf…

Flutter第十二弹 Flutter多平台运行

目标: 1.在多平台调试启动Flutter程序运行 一、安卓模拟器 1.1 检查当前Flutter适配的版本 flutter doctor提供了Flutter诊断。 $ flutter doctor --verbose /Users/zhouronghua/IDES/flutter/bin/flutter doctor --verbose [✓] Flutter (Channel master, 2.1…

操作系统:高效、稳定的承上启下

标题:操作系统:高效、稳定的承上启下 水墨不写bug (图片来源于网络) 目录 一、初识操作系统 第一个操作系统:Uinx Uinx的商业化 Linux:横空出世 二、如何在Windows上使用Linux 正文开始:…

打工人的PPT救星来了!用这款AI工具,10秒生成您的专属PPT

今天帮同事解决了一个代码合并的问题。其实问题不复杂,要把1的代码合到2的位置: 这个处理方式其实很简单,使用 “git cherry-pick hash值” 就可以。 同事直接对我赞许有加,不曾想被领导看到了,对我说了一句&#xff…

Tampermonkey油猴 跨域请求下载图片示例

Tampermonkey油猴 跨域请求下载图片示例 前言项目目标网站代码编写 运行效果 前言 需要用油猴采集并下载一个网站的图片,直接下下不了,搜了一下,是禁止跨域,使用CORS Unblock也不行,所以使用油猴自带的GM_xmlhttpRequ…

The First项目报告:解读互链操作协议LayerZero

随着 DeFi 项目的兴起,跨链互操作性成为区块链领域的热门话题,在众多的跨链平台中,Layer Zero 凭借其创新技术和设计备受关注,近期Layer Zero发布代币空投方案,引发社区热议,随着其代币上线The First平台&a…

【STM32入门学习】学习嵌入式实时操作系统(RTOS)移植uc/OS到stm32F103上

目录 一、建立STM32HAL库工程 1.1实时操作系统 1.2基于HAL库创建工程 二、获取uC/OS-III源码 三、移植准备 3.1复制uC/OS-III文件到工程文件夹 3.2添加工程组件和头文件路径 四、移植修改代码 4.1.启动文件修改: 4.2.app_cfg.h &a…

【数据结构】线性表之《栈》超详细实现

栈 一.栈的概念及结构二.顺序栈与链栈1.顺序栈2.链栈1.单链表栈2.双链表栈 三.顺序栈的实现1.栈的初始化2.检查栈的容量3.入栈4.出栈5.获取栈顶元素6.栈的大小7.栈的判空8.栈的清空9.栈的销毁 四.模块化源代码1.Stack.h2.Stack.c3.test.c 一.栈的概念及结构 栈:一种…

Azure vs. AssemblyAI:深度解析语音转文本服务的对决

在技术飞速发展的今天,API已成为连接不同软件和服务的关键桥梁。对于需要语音转文本功能的应用,我们对比了两个广受欢迎的API接口:Azure 语音转文本和AssemblyAI AI语音转文本。 Azure 语音转文本 Azure 语音转文本提供快速、准确的语音转文本…

ArrayList知识点(面试)

上一篇我们说了hashmap的相关知识点,这一篇我们再说一些ArrayList的相关知识,因为ArrayList也是我们项目中比较常用的。 ArrayList(底层是数组) 底层工作原理 首先,在构造ArrayList的时候会先看有没有指定容量,如果没有&#xf…

音视频开发29 FFmpeg 音频编码- 流程以及重要API,该章节使用AAC编码说明

此章节的一些参数,需要先掌握aac的一些基本知识:​​​​​​aac音视频开发13 FFmpeg 音频 --- 常用音频格式AAC,AAC编码器, AAC ADTS格式 。_ffmpeg aac data数据格式-CSDN博客 目的: 从本地⽂件读取PCM数据进⾏AAC格…

FL论文专栏|设备异构、异步联邦

论文:Asynchronous Federated Optimization(12th Annual Workshop on Optimization for Machine Learning) 链接 实现Server的异步更新。每次Server广播全局Model的时候附带一个时间戳,Client跑完之后上传将时间戳和Model同时带回…

【办公类-50-01】20240620自主游戏观察记录表19周内容打乱

背景需求: 又到了期末,各种班级资料需要提交。 有一份自主游戏观察记录需要写19周(每周2次)的观察记录,并根据参考书填写一级、三级、五级的评价指标。 去年中六班的时候,我很认真的手写了21周的户外游戏…

基于CST的连续域束缚态(BIC)设计与机制研究

关键词:太赫兹,超表面,连续域束缚态,CST,高Q 束缚态的概念最先出现于量子力学中,当粒子被势场约束在特定的区域内运动,即在无限远处波函数等于零的态叫束缚态,例如势阱中的粒子就处…

Map集合之HashMap细说

最近在看面试题,看到了hashmap相关的知识,面试中问的也挺多的,然后我这里记录下来,供大家学习。 Hashmap为什么线程不安全 jdk 1.7中,在扩容的时候因为使用头插法导致链表需要倒转,从而可能出现循环链表问…

百度ai人脸识别项目C#

一、项目描述 本项目通过集成百度AI人脸识别API,实现了人脸检测和识别功能。用户可以上传图片,系统将自动识别人脸并返回识别结果。 二、开发环境 Visual Studio 2019或更高版本.NET Framework 4.7.2或更高版本AForge.NET库百度AI平台人脸识别API 三、…

Django 模版变量

1,模版变量作用 模板变量使用“{{ 变量名 }}” 来表示模板变量前后可以有空格,模板变量名称,可以由数字,字母,下划线组成,不能包含空格模板变量还支持列表,字典,对象 2,…