Pytorch 容器 - 1. Module类介绍
目录
1. 基于Module构建自己的网络
2. Module的初始化变量
3. Modules中需要子类 forward()
4. Modules中其他内置函数
1. 基于Module构建自己的网络
torch.nn.Module是所有神经网络模块的基类,如何定义自已的网络:
- 由于 Module 是神经网络模块的基类,自己的模型应该要继承这个类
- 要实现 torch.nn.Module 中的forward函数,从而进行网络的前向传播
- 一般把网络中具有可学习参数的层放在构造函数__init__()中
- 把不具有可学习参数的层(如ReLU)放在forward中,并通过nn.functional来代替
import torch.nn as nn
import torch.nn.functional as Fclass Model(nn.Module): # 继承nn.Module类def __init__(self):super(Model, self).__init__()# 把具有可学习参数的层放在构造函数中self.conv1 = nn.Conv2d(1, 20, 5) self.conv2 = nn.Conv2d(20, 20, 5)def forward(self, x): # 实现forward函数# 在forward中直接使用torch.nn.functional.relu()函数x = F.relu(self.conv1(x))return F.relu(self.conv2(x))
2. Module的初始化变量
nn.Module 类内置了一些初始化变量。包括在模块 forward、 backward 和权重加载等时候会被调用的的 hooks,也定义了 parameters 和 buffers,如源码所示:
def __init__(self):"""Initializes internal Module state, shared by both nn.Module and ScriptModule."""torch._C._log_api_usage_once("python.nn_module")self.training = True # 当前训练/测试的状态self._parameters = OrderedDict() # 在训练过程中会随 BP 而更新的参数self._buffers = OrderedDict() # 在训练过程中不会随 BP 而更新的参数self._non_persistent_buffers_set = set() self._backward_hooks = OrderedDict() # Backward 完成后会被调用的 hookself._is_full_backward_hook = Noneself._forward_hooks = OrderedDict() # Forward 完成后会被调用的 hookself._forward_pre_hooks = OrderedDict() # Forward 前会被调用的 hookself._state_dict_hooks = OrderedDict() # 得到 state_dict 以后会被调用的 hookself._load_state_dict_pre_hooks = OrderedDict() # 加载state_dict 前会被调用的 hookself._modules = OrderedDict() # 网络的子模块
3. Modules中需要子类 forward()
注意:在网络训练过程中,直接通过mode(input) 自动调用forward函数,而非model.forward(input)进行调用,因为前者mode(input) 除了forward()外还调用了额外的函数:先执行_forward_pre_hooks里的所有hooks
- 再调用forward()
- 执行_forward_hooks中所有hooks
- 执行_backward_hooks中所有hooks
4. Modules中其他内置函数
除了初始化的成员变量之外,Modules还内置了很多函数,具体包含以下几类:
(1) 属性访问:modules(), named_modules(), buffers(), named_buffers(), children(), named_children(), parameters(), named_parameters() 等
(2) 属性设置:register_parameter(),register_buffer(),register_forward_hook(),register_forward_pre_hook() 等
(3) 参数转换/转移:cpu(), cuda(), float(), double() 等
(4) 状态转换:train(), eval() 等
对于这些内置函数的详细介绍,在 PyTorch系列相关文章-Aaron_neil的csdn博客 持续更新中!
本文所参考的部分博客:
[1] pytorch 入坑三:nn module - 知乎
[2] torch.nn.Module模块简单介绍_allan2222的博客-CSDN博客
相关文章:
Pytorch 容器 - 1. Module类介绍
目录 1. 基于Module构建自己的网络 2. Module的初始化变量 3. Modules中需要子类 forward() 4. Modules中其他内置函数 1. 基于Module构建自己的网络 torch.nn.Module是所有神经网络模块的基类,如何定义自已的网络: 由于 Module 是神经网络模块的基…...
百度墨卡托坐标转化笔记
一、墨卡托坐标转化 调研了python和java多种实现方式的转换,发现有的不符合需求,原因还没找到。 我是用百度地图返回的poi边界(返回的是墨卡托坐标) 转换的原理没有深入研究,直接拿来用的,测试可行&…...
每日学术速递4.12
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.HC 随着新的“生成代理”论文的发布,LLM刚刚达到了一个重要的里程碑——通过使用 LLM,生成代理能够在受《模拟人生》启发的交互式沙箱中模拟类人行为。代理架构扩展…...
HarmonyOS/OpenHarmony公司级技术开发团队硬件基本配置清单
有朋友公司咨询进入HarmonyOS/OpenHarmony领域,组建技术团队,硬件设备的基本配置应该是怎么样的比较合适?这个是进入鸿蒙开发领域相关配置的第一步,我们以一个基本的团队配置为例说明,供想进入的团队参考。 HarmonyOS/…...
新一代信息技术赋能,安科瑞搭建智慧水务体系的新思路
随着新时期治水方针的逐步落实,水利现代化、智能化建设已开启,物联网、图像识别、数字孪生等新技术的成熟,也为智慧水务体系的搭建提供了技术保障,新时代治水新思路正逐步得到落实。本文对智慧水务的总体架构与包含的建设内容进行…...
37岁测试工程师被裁,120天没找到工作,无奈...
从短期来看,程序员的确算是个不错的工作,薪水也比一般岗位高很多,但是从长远来看,程序员的中年危机会比其他岗位来的更早,很多程序员只有到了35岁左右,才能真正认清楚互联网行业,尤其是被裁之后…...
Java容器使用注意点
前置:问题 判空集合转map集合遍历集合去重集合转数组数组转集合 一:集合判空 《阿里巴巴 Java 开发手册》的描述如下: 判断所有集合内部的元素是否为空,使用 isEmpty() 方法,而不是 size()0 的方式。 我们在开发中也…...
密文题解(图论+字典树)
题目大意 有一段长度为nnn的密文,密文的每一位都可以用一个非负整数来描述,并且每一位都有一个权值aia_iai。你可以操作任意多次,每次操作可以选择任意一段密文,花费选择的所有位上权值的异或和的代价获得这段密文每一位的异或…...
Baumer工业相机堡盟工业相机如何通过BGAPISDK里的工具函数来计算工业相机的实时帧率(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来计算相机的实时帧率(C#)Baumer工业相机Baumer工业相机的帧率的技术背景Baumer工业相机的帧率计算方式在BufferEvent声明显示FrameID设计显示帧率的函数Baumer工业相机通过BGAPI SDK计算帧率的优势B…...
数据结构与常量(Java)
目录 1.字面常量 2. 数据类型 3. 变量 3.1 变量概念 3.2 语法格式 补充:变量 int long short double和float char boolean byte 4.类型转换 类型提升小结 5. 字符串类型 1. int 转成 String 2. String 转成 int 1.字面常量 类似System.Out.p…...
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点 p269 -- Java Version
题目链接:https://leetcode.cn/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/ 1. 题目介绍( 54. 二叉搜索树的第k大节点) 给定一棵二叉搜索树,请找出其中第 k 大的节点的值。 【测试用例】: 示例 1: 示例2&…...
[工具类] post请求 获取request对象, 获取request的请求体(body)参数
目录 引言: 1. 获取request对象的几种常用方式 -> 1.1 获取请求对象 通过请求上下文对象 获取信息[推荐] -> 1.2 在controller层直接获取[不推荐 侵害性太强] -> 1.3 interceptor中获取[部分业务中使用] -> 1.4 request常用api简介 2. 获取request的body的工具…...
Golang 多版本安装小工具G
voidint制作的Golang版本安装管理,非常好用。想装就装,想换版本就换版本 除了一些使用go install的场景可能有不兼容,主要是安装了工具有时候不能直接用。 GitHub - voidint/g: Golang Version Manager 使用方式很简单&a…...
day29—选择题
文章目录1.HashSet子类依靠什么方法区分重复元素(C)2.以下代码在编译和运行过程中会出现什么情况(A)3.有这么一段程序,执行的结果是(C)1.HashSet子类依靠什么方法区分重复元素(C&…...
day8 互斥锁/读写锁的概念及使用、死锁的避免
目录 互斥锁的概念和使用 线程通信 - 互斥 互斥锁的创建和销毁 互斥锁的创建 互斥锁的销毁 互斥锁的使用 申请锁 释放锁 互斥锁的概念和使用 线程通信 - 互斥 临界资源: 一次只允许一个任务(进程、线程)访问的共享资源;…...
2023-04-13 monetdb-str类型变长存储-分析
摘要: monetdb的列的基本抽象是BAT,但是对于列数据的存储方式, 对于固定长度和不固定长度,使用了不同的存储方式。 固定长度的数据比如int,int64之类的, 直接存储在了数据tail文件。 但是对于不固定长度比如string, 则使用另外一个独立的theap文件存储, tail文件仅保留对于…...
011:Mapbox GL两种方式隐藏logo和版权,个性化版权的声明
第011个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中用两种方式隐藏logo和版权,并个性化版权的声明 。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共91行)相关API参考:专栏目标示例效果 配置方式…...
结合PCA降维的DBSCAN聚类方法(附Python代码)
目录 前言介绍: 1、PCA降维: (1)概念解释: (2)实现步骤: (3)优劣相关: 2、DBSCAN聚类: (1)概念解释&a…...
限流:计数器、漏桶、令牌桶 三大算法的原理与实战(史上最全)
限流 限流是面试中的常见的面试题(尤其是大厂面试、高P面试) 注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请到文末《技术自由圈》公号获取 为什么要限流 简单来说: 限流在很多场景中用来…...
Redis用于全局ID生成器、分布式锁的解决方案
全局ID生成器 每个店铺都可以发布优惠卷 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增id就存在一些问题: 1.id的规律性太明显 2.受单表数据量的限制 全局ID生成器,是一种在分布式系…...
从IPython和REPL中找灵感:用prompt_toolkit打造你的专属Python交互式环境
从IPython和REPL中找灵感:用prompt_toolkit打造你的专属Python交互式环境 在Python开发者的日常工作中,交互式环境是不可或缺的伙伴。无论是快速验证代码片段、调试复杂逻辑,还是探索数据结构和API行为,一个优秀的交互式环境能显…...
MoveIt新手避坑:Gazebo仿真时遇到‘Unable to identify controllers‘报错,检查这个launch文件就对了
MoveIt新手避坑:Gazebo仿真时遇到Unable to identify controllers报错解决方案 当你第一次尝试在Gazebo中运行MoveIt控制机械臂时,看到终端弹出鲜红的报错信息"Unable to identify any set of controllers that can actuate the specified joints&q…...
深入RISC-V调试模块:从硬件设计视角看DM、DTM与抽象命令的实现
RISC-V调试模块硬件架构深度解析:从状态机到抽象命令的工程实现 1. RISC-V调试系统的硬件架构全景 在RISC-V生态系统中,调试模块(Debug Module, DM)作为连接外部调试器与处理器核心的关键枢纽,其硬件设计直接决定了芯片的可调试性。与传统的…...
Windows 10终极清理指南:5步让系统飞起来的完整教程
Windows 10终极清理指南:5步让系统飞起来的完整教程 【免费下载链接】Debloat-Windows-10 A Collection of Scripts Which Disable / Remove Windows 10 Features and Apps 项目地址: https://gitcode.com/gh_mirrors/de/Debloat-Windows-10 你是否感觉Windo…...
Spring Authorization Server设备授权深度实践:从协议解析到企业落地
Spring Authorization Server设备授权深度实践:从协议解析到企业落地 【免费下载链接】spring-authorization-server Spring Authorization Server 项目地址: https://gitcode.com/gh_mirrors/sp/spring-authorization-server 一、概念解析:为什么…...
Fish Speech 1.5在医疗健康领域的语音辅助应用
Fish Speech 1.5在医疗健康领域的语音辅助应用 1. 引言 在医疗健康领域,清晰准确的语音交流至关重要。医生需要向患者解释病情,护士要按时提醒用药,患者可能因为视力问题无法阅读病历资料。传统的文字信息在这些场景中往往显得不够直观和便…...
SEO工作规划需要制定哪些KPI指标
<h2>SEO工作规划需要制定哪些KPI指标</h2> <p>在当前竞争激烈的网络环境中,SEO(搜索引擎优化)已经成为企业获取流量和提升品牌知名度的关键手段。单靠SEO的理念和方法,往往难以达到预期的效果。因此,…...
Java毕业设计基于springboot+vue的校内兼职信息管理系统
前言 Spring Boot 校内兼职信息管理系统是以 Spring Boot 框架为核心搭建的,专门用于高效管理校园内各类 兼职信息的平台。随着校园生活的多元化发展,学生对兼职机会的需求日益增长,传统的兼职信息发布与管理方式杂乱无章,存在信息…...
STM32架构解析:哈佛与冯·诺依曼的工程实践
STM32处理器架构解析:哈佛结构与冯诺依曼结构的工程实践 1. 计算机体系结构基础 1.1 冯诺依曼体系结构 冯诺依曼体系结构(Von Neumann architecture)是现代计算机的基础设计范式,其核心特征包括: 统一存储结构 &am…...
从ReVeal到实战:基于图神经网络的智能漏洞检测技术演进与落地思考
1. 图神经网络在漏洞检测中的崛起 第一次接触代码漏洞检测领域时,我被传统方法的繁琐流程震惊了。记得当时需要手动定义数百条规则来检测缓冲区溢出漏洞,每次遇到新漏洞类型就得加班加点补充规则。直到2018年遇到ReVeal论文,才发现图神经网络…...
