模型容器与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,输出维度为64nn.ReLU(),  # 添加ReLU激活函数nn.Linear(in_features=64, out_features=10),  # 添加一个线性层,输入维度为64,输出维度为10nn.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,色彩修改

在这里插入图片描述

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

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

相关文章

x-cmd pkg | grex - 用于生成正则表达的命令行工具

目录 简介首次用户生成的正则表达式与 perl 和 rust 兼容支持 Unicode 符号友好的用户体验进一步阅读 简介 grex 是一个旨在简化创作正则表达式的复杂且繁琐任务的库和命令行程序。这个项目最初是 Devon Govett 编写的 JavaScript 工具 regexgen 的 Rust 移植。但 regexgen 在…

二级C语言备考1

一、单选 共40题 (共计40分) 第1题 (1.0分) 题号:6923 难度:较易 第1章 以下叙述中正确的是 A:C语言规定必须用main作为主函数名,程序将从此开始执行 B:可以在程序中由用户指定任意一个函数作为主函数…

Oracle游标深入探讨

Oracle游标深入探讨 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在今天的分享中,我将带大家深入探讨Oracle游标,这是数据库操作中一个极为…

AArch64 Exception Model学习

提示 该博客主要为个人学习,通过阅读官网手册整理而来(个人觉得阅读官网的英文文档非常有助于理解各个IP特性)。若有不对之处请参考参考文档,以官网文档为准。 1 Privilege and Exception Levels 1.1 为什么要划分权限&#xf…

Python的异常处理案例——网购平台交易案例

需求 假设有多条交易信息,写个raise抛出异常,try…except 负责梳理出正常数据有哪些和非正常数据有哪些 解决 使用 raise 抛出异常并使用 try-except 梳理出正常数据和非正常数据: class InvalidTransactionException(Exception):def __i…

【Rust日报】2024-01-08 async-graphql: 7.0.0 版本发布

认真对待 Rust,多写 Rust 作者通过参与一次黑客马拉松,尝试用Rust重新实现颜色工具,开始了对Rust的深入探索。Rust编译器以友好的错误提示和严格的规则为特点,使作者愈发热衷于写更多Rust代码。Rust社区通过内建lint工具支持新手&…

MySQL基础笔记(3)DML数据操作语句

顾名思义,全称是数据操作语言,用来对数据库中表的数据记录进行增删改操作~ 目录 一.添加数据 1.给指定字段添加数据 2.给全部字段添加数据 3.批量添加数据 二.修改数据 三.删除数据 一.添加数据 1.给指定字段添加数据 insert into 表名 (字段名…

java数据结构与算法刷题-----LeetCode343. 整数拆分(TODO)

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难,但它就是固定套路而已。其实动态规划只…

jenkins构建git项目timeout

问题点: Started by user unknown or anonymous Running as SYSTEM Building in workspace /var/jenkins_home/workspace/test-one using credential f28d956-8ee1-4f20-a32b-06879b487c70 Cloning the remote Git repository Cloning repository http://git.cc.co…

Flink CDC使用

Flink 环境准备 Flink 版本对应的CDC版本 两个jar包上传到flink bin目录下 flink-sql-connector-mysql-cdc mysql-connector-java 重启Flink集群

stm32的FMC数据访问与突发模式

数据访问 配置外部存储器的宽度为 16 位, FMC 将使用内部的 ADDR[25:1]地址来作为对外部存储器的寻址地址 FMC_A[24:0],这段描述是在解释在STM32的FMC(Flexible Memory Controller)中,如何配置外部存储器的宽度为16位…

资产信息管理系统-前后端开发

题目要求: 资产管理系统 利用H5规范,CSS样式与JS脚本独立于HTML页面,Javascript调用jQuery库,CRUD后端使用FastAPI封装,前端页面在Nginx中运行,调用API模块, 实现CURD的课设总结 基本设计&am…

【已解决】c语言编写的lib如何调用

本博文源于笔者在vs2015正在编写的lib想要调用的问题,正常的操作是将项目生成lib,但是然后又如何操作呢,本博文就是解决这样的问题 文章目录 问题再现步骤1:编写lib.h与lib.c步骤2:生成lib步骤3:添加用得到…

系列二十九、Spring Boot打成jar包后,resources目录下的资源文件获取不到

一、Spring Boot打成jar包后,resources目录下的资源文件获取不到 1.1、问题描述 在做公司业务开发时,有一个地方是使用EasyExcel模板技术进行文件上传,测试环境是OK的,但是和前后端联调验证测试通过后,上传到生产环境…

7 集中式日志和分布式跟踪

文章目录 日志聚合模式日志集中化的简单解决方案使用日志并输出分布式跟踪Spring Cloud Sleuth实现分布式跟踪 小结 前面的文章: 1、 1 一个测试驱动的Spring Boot应用程序开发 2、 2 使用React构造前端应用 3、 3 试驱动的Spring Boot应用程序开发数据层示例 4、…

vue 农历日期转公历日期(含插件 js-calendar-converter 使用教程)

安装插件 cnpm install js-calendar-converter --S导入插件 import calendar_converter from js-calendar-converter农历日期转公历日期 let new_date calendar_converter.lunar2solar(2023, 12, 01) let new_year new_date.cYear let new_month new_date.cMonth < 10…

中国京津冀国际光伏展

中国京津冀国际光伏展是一个专门展示光伏技术和产品的展览会。该展览会旨在促进光伏产业的发展和推广&#xff0c;推动太阳能光伏的应用和利用。 这个展览会通常会邀请国内外的光伏企业和专家参加&#xff0c;展示最新的光伏技术和产品&#xff0c;包括太阳能电池板、光伏组件、…

PyTorch 参数化深度解析:自定义、管理和优化模型参数

目录 torch.nn子模块parametrize parametrize.register_parametrization 主要特性和用途 使用场景 参数和关键字参数 注意事项 示例 parametrize.remove_parametrizations 功能和用途 参数 返回值 异常 使用示例 parametrize.cached 功能和用途 如何使用 示例…

RequestMapping注解的使用和常见的GET和POST请求方式

RequestMapping注解的使用和常见的GET和POST请求方式 1、使用说明 作用&#xff1a;用于建立请求URL和处理请求方法之间的对应关系。 出现位置&#xff1a; 类上&#xff1a; 请求 URL的第一级访问目录。此处不写的话&#xff0c;就相当于应用的根目录。写的话需要以/开头。它…

计算机科学速成课【学习笔记】(4)——二进制

本集课程B站链接&#xff1a; 4. 二进制-Representing Numbers and Letters with Binary_BiliBili_哔哩哔哩_bilibili4. 二进制-Representing Numbers and Letters with Binary_BiliBili是【计算机科学速成课】[40集全/精校] - Crash Course Computer Science的第4集视频&…