模型容器与AlexNet构建

一、模型容器——Containers

在这里插入图片描述

nn.Sequential 是 nn.module的容器,用于按顺序包装一组网络层

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

Sequential 容器

nn.Sequential 是 nn.module的容器,用于按顺序包装一组网络层
• 顺序性:各网络层之间严格按照顺序构建
• 自带forward():自带的forward里,通过for循环依次执行前向传播运算

Sequential 是 PyTorch 中的一个容器类,用于将多个模块按照顺序组合在一起形成一个模型。Sequential 容器允许我们按照顺序添加不同的层或模块,以构建神经网络模型。

使用 Sequential 容器,可以通过简单的方式定义一个模型,无需手动编写 forward() 函数。只需要按照顺序将模块添加到 Sequential 容器中,输入数据会按照添加的顺序依次经过每个模块进行计算。

下面是使用 Sequential 容器构建一个简单的神经网络模型的示例:

import torch
import torch.nn as nn

# 创建一个Sequential容器,并按顺序添加模块
model = nn.Sequential(
    nn.Linear(in_features=100, out_features=64),  # 添加一个线性层,输入维度为100,输出维度为64
    nn.ReLU(),  # 添加ReLU激活函数
    nn.Linear(in_features=64, out_features=10),  # 添加一个线性层,输入维度为64,输出维度为10
    nn.Softmax(dim=1)  # 添加Softmax函数,dim=1表示按行计算Softmax
)

在上面的示例中,我们首先创建了一个 Sequential 容器 model,然后按照顺序添加了四个模块:一个线性层、一个ReLU激活函数、另一个线性层和一个Softmax函数。这样就构建了一个简单的神经网络模型。

使用 Sequential 容器可以简化模型的定义和使用,特别适用于简单的线性堆叠结构。但对于一些复杂的网络结构,可能需要使用其他的容器或自定义模型来更灵活地组织模块。

nn.ModuleList

nn.ModuleListnn.Module 的容器,用于包装一组网络层,并以迭代方式调用这些网络层。与 nn.Sequential 不同,nn.ModuleList 可以更灵活地管理和操作网络层。

下面是 nn.ModuleList 的几个主要方法:

  • append(module):在 ModuleList 的末尾添加一个网络层。
  • extend(module_list):将另一个 ModuleList 中的网络层拼接到当前 ModuleList 的末尾。
  • insert(index, module):在指定的位置 index 插入一个网络层。
  • remove(module):从 ModuleList 中移除指定的网络层。
  • pop(index):移除并返回指定位置 index 的网络层。
  • forward(*inputs):重写 nn.Moduleforward 方法,以便迭代调用 ModuleList 中的网络层。
    下面是一个示例,展示如何使用 nn.ModuleList
import torch
import torch.nn as nn
class MyModule(nn.Module):
    def __init__(self):
        super(MyModule, self).__init__()
        self.layers = nn.ModuleList([
            nn.Linear(10, 20),
            nn.ReLU(),
            nn.Linear(20, 30),
            nn.ReLU()
        ])
    def forward(self, x):
        for layer in self.layers:
            x = layer(x)
        return x
model = MyModule()
input_tensor = torch.randn(32, 10)
output = model(input_tensor)

在上述示例中,我们定义了一个自定义的模型 MyModule,其中使用了 nn.ModuleList 来包装了一组网络层。在 forward 方法中,我们使用迭代方式调用了 ModuleList 中的每个网络层,将输入 x 逐层传递,并最终返回输出结果。

nn.ModuleDict

nn.ModuleDict是nn.Module的容器,用于包装一组网络层,并以索引方式调用网络层。下面是对主要方法的解释:

  • clear(): 清空ModuleDict中的所有网络层。
  • items(): 返回一个可迭代的键值对(key-value pairs)的视图,可以用于遍历ModuleDict中的所有网络层。
  • keys(): 返回一个可迭代的键(key)的视图,可以用于遍历ModuleDict中的所有键。
  • values(): 返回一个可迭代的值(value)的视图,可以用于遍历ModuleDict中的所有值。
  • pop(key): 返回指定键(key)对应的值(value),并从ModuleDict中删除该键值对。
    使用nn.ModuleDict可以方便地管理和调用一组网络层,例如:
import torch
import torch.nn as nn

# 定义自定义模型类 MyModule
class MyModule(nn.Module):
    def __init__(self):
        super(MyModule, self).__init__()
        # 使用 nn.ModuleDict 包装一组网络层
        self.layers = nn.ModuleDict({
            'linear1': nn.Linear(10, 20),  # 第一个线性层,输入维度为10,输出维度为20
            'relu1': nn.ReLU(),  # ReLU激活函数层
            'linear2': nn.Linear(20, 30),  # 第二个线性层,输入维度为20,输出维度为30
            'relu2': nn.ReLU()  # ReLU激活函数层
        })

    def forward(self, x):
        x = self.layers['linear1'](x)  # 调用第一个线性层
        x = self.layers['relu1'](x)  # 调用ReLU激活函数层
        x = self.layers['linear2'](x)  # 调用第二个线性层
        x = self.layers['relu2'](x)  # 调用ReLU激活函数层
        return x

# 实例化自定义模型
model = MyModule()

# 创建输入张量
input_tensor = torch.randn(32, 10)  # 创建一个大小为32x10的随机张量作为输入

# 前向传播
output = model(input_tensor)  # 将输入张量传入模型进行前向传播

在上述代码中,我们使用nn.ModuleDict包装了一组网络层,并使用键(key)来索引调用网络层。在模型的forward方法中,我们通过self.layers[key]的方式来调用具体的网络层,实现了前向传播过程。

容器总结

• nn.Sequential:顺序性,各网络层之间严格按顺序执行,常用于block构建
• nn.ModuleList:迭代性,常用于大量重复网构建,通过for循环实现重复构建
• nn.ModuleDict:索引性,常用于可选择的网络层

AlexNet构建

AlexNet:2012年以高出第二名10多个百分点的准确率获得ImageNet分类任务冠
军,开创了卷积神经网络的新时代

AlexNet特点如下:

  1. 采用ReLU:替换饱和激活函数,减轻梯度消失
  2. 采用LRN(Local Response Normalization):对数据归一化,减轻梯度消失
  3. Dropout:提高全连接层的鲁棒性,增加网络的泛化能力
  4. Data Augmentation:TenCrop,色彩修改

在这里插入图片描述

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

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

相关文章

HACKTHEBOX通关笔记——Poison(退役)

调试网络连通性 拿到IP我们还是做一下nmap扫描,快速速率扫描结合-A详细扫描,事半功倍 nmap --rate-min 5000 -p- 10.129.58.204 -vnmap -A -p 22,80 10.129.58.204 -v 发现http是一个可以读取文件的页面 这台主机似乎没办法做目录扫描,一扫…

电脑找不到ffmpeg.dll的解决方法有哪些,分享5种可靠的方法

在计算机编程和多媒体处理领域,ffmpeg.dll是一个非常重要的动态链接库文件。它是由FFmpeg项目开发和维护的,FFmpeg是一个开源的音视频处理框架,提供了一套完整的音视频编解码、转码、流化、滤镜等功能。ffmpeg.dll是FFmpeg库的一部分&#xf…

SwiftUI之深入解析Alignment Guides的超实用实战教程

一、Alignment Guide 简介 Alignment guides 是一个强大的布局工具,但通常未被充分利用。在很多情况下,它们可以帮助我们避免更复杂的选项,比如锚点偏好。如下所示,对对齐的更改也可以自动(并且容易地)动画…

MySQL语法及IDEA使用MySQL大全

在项目中我们时常需要写SQL语句,或简单的使用注解直接开发,或使用XML进行动态SQL之类的相对困难的SQL,并在IDEA中操控我们的SQL,但网上大都图方便或者觉得太简单了,完全没一个涵盖两个方面的讲解。 单表: …

GO语言笔记3-指针

指针的概念 先看一段代码的输出 package main import "fmt" func main(){ var age int 18fmt.Println("age的内存地址值是:",&age)//age的内存地址值是: 0xc000012090// 定义一个指针变量// *int 是一个指针类型,可以理解为指向int类型的…

TEMU 新手小白必看!2024入驻流程/入驻类目/入驻资料等详细流程讲解

2023 TEMU 可谓是赚足眼球,流量持续上涨,2024年相信不少卖家们已经跃跃欲试,但大陆卖家如何入驻TEMU?哪些品类适合入驻?又有哪些入驻要求和资料?别急,今天东哥就一一给大家详细讲解,…

Python操作excel-读取、表格填充颜色区分

1.场景分析 遇到一个需要读取本地excel数据,处理后打入到数据库的场景,使用java比较重,python很好的解决了这类问题 2.重难点 本场景遇到的重难点在于: 需要根据表格内的背景颜色对数据进行筛选 读取非默认Sheet 总是出现Value…

UE5 使用动画模板创建多个动画蓝图

我们制作游戏的时候,角色会根据不同的武器表现出来不同的攻击动画,待机动画以及移动动画。如果我们在UE里面实现这个需求,是通过复制粘贴的方式修改,还是有更好的方式。 这里就需要介绍一下动画模板,我们可以将动画蓝图…

在黑马程序员大学的2023年终总结

起笔 时间真快,转眼又是年末。是时候给2023做个年终总结了,为这一年的学习、生活以及成长画上一个圆满的句号。 这一年相比去年经历了很多事情,接下来我会一一说起 全文大概4000字,可能会占用你15分钟左右的时间 经历 先来给大…

外包干了3个多月,技术退步明显

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

【STM32】WDG看门狗

1 WDG简介 WDG(Watchdog)看门狗 看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保…

解决不同请求需要的同一实体类参数不同(分组校验validation)

问题概述 新增目录是自动生成id&#xff0c;不需要id参数&#xff1b;更新目录需要id&#xff0c;不能为空 pom.xml中已有spring-boot-starter-validation依赖 <!--validation(完成属性限制&#xff0c;参数校验)--><dependency><groupId>org.springframew…

设计模式的艺术P1基础—2.4-2.11 面向对象设计原则

设计模式的艺术P1基础—2.4-2.11 面向对象设计原则 2.4 面向对象设计原则概述 向对象设计的目标之一在于支持可维护性复用&#xff0c;一方面需要实现设计方案或者源代码的重用&#xff0c;另一方面要确保系统能够易于扩展和修改&#xff0c;具有较好的灵活性。 面向对象设计…

NSSCTF EasyP

开启环境&#xff1a; 这一题我们通过分析需要知道一些知识&#xff1a; 1.$_SERVER[‘PHP_SELF’] &#xff1a;正在执行脚本的文件名 例子&#xff1a;127.0.0.1/pikachu/index.php 显示&#xff1a;/pikachu/index.php 2.S​ERVER[′REQUESTU​RI′]&#xff1a;与 _SERV…

小巧且兼具高性能的小模型 TinyLlama 等

TinyLlama-1.1B 小模型在边缘设备上有着广泛的应用&#xff0c;如智能手机、物联网设备和嵌入式系统&#xff0c;这些边缘设备通常具有有限的计算能力和存储空间&#xff0c;它们无法有效地运行大型语言模型。因此&#xff0c;深入探究小型模型显得尤为重要。 来自新加坡科技…

【C语言】操作符

操作符分类 算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号操作符下标引用、函数调用和结构成员操作符 算术操作符 除了 % 操作符之外&#xff0c;其他的几个操作符可以作用于整数和浮点数。 对于 / 操作符如果两个操作数都为整数&am…

AMEYA360 | 热敏电阻的工作原理及作用 热敏电阻厂商有哪些

摘要&#xff1a;热敏电阻是一种传感器电阻&#xff0c;其电阻值随着温度的变化而改变。热敏电阻的工作原理是使用传感器来帮助调节温度高低&#xff0c;作用包括电压调节&#xff0c;音量控制&#xff0c;时间延迟和电路保护。热敏电阻具有测温、温度补偿、过热保护、液面测量…

基于springboot+vue的家政服务系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

jmeter连接数据库

1.准备工作 连接数据库需要第三方包 mysql-connector-java-5.1.35-bin 放入路径下&#xff1a;"C:apache-jmeter-5.0\lib\ext\mysql-connector-java-5.1.35-bin.jar" 2.重启jmeter 3.运用场景&#xff1a;可以用于造数据&#xff0c;恢复数据&#xff0c;方便案例…

Java设计模式详解超详细(含示例代码)

1. 什么是设计模式 设计模式&#xff0c;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 2. 设计模式分类 创建型模式&#xff0c;共五种&#xff1a;工厂方法…