Pytorch中nn.Module中的self.register_buffer解释

2023-05-16

self.register_buffer作用解释

今天遇到了这样一种用法,self.register_buffer(‘name’,Tensor),该方法的作用在于定义一组参数。该组参数在模型训练时不会更新(即调用optimizer.step()后该组参数不会变化,只可人为地改变它们的值),但是该组参数又作为模型参数不可或缺的一部分。

实验

四种方式初始化模型中的参数

  1. 定义常见模型时的操作
  2. 使用register_buffer()定义一组参数
  3. 使用register_parameter()定义一组参数
  4. 使用python类的属性方式定义一组变量
import torch
import torch.nn as nn
from collections import OrderedDict

class Model(nn.Module):
	def __init__(self):
	super(Model,self).__init__()
	
	#(1)定义常见模型时的操作
	self.param_nn = nn.Sequential(OrderedDict([
		('conv',nn.Conv2d(1,1,3,bias=False)),
		('fc',nn.Linear(1,2,bias=False))
	]))
	
	#(2)使用register_buffer()定义一组参数
	self.register_buffer('reg_buf',torch.randn(1,2))

	#(3)使用register_parameter()定义一组参数
	self.register_parameter('reg_param',nn.Parameter(torch.randn(1,2)))

	#(4)使用python类的属性方式定义一组变量
	self.param_attr = torch.randn(1,2)

net = Model()
	

问题1:哪些参数会在模型训练时被更新?

因为定义优化器时会传入一个参数net.parameters,所以在模型训练时更新的参数可以通过list(net.named_parameters())查看
在这里插入图片描述
结果说明,只有方式(1)和方式(3)定义的参数可以被更新

问题2:模型中的参数到底有哪些?

模型中的所有参数都装在state_dict()中,所以可以通过net.state_dict()方式查看
在这里插入图片描述
结果说明,只有方式(4)的参数不在模型的参数列表,没有被模型训练时更新的参数reg_buf,依然在模型的参数列表里

self.register_buffer()的使用方法

  1. 传入参数:第一个参数传入一个字符串,表示这组参数的名字,第二个就是tensor形式的参数
  2. 在模型定义中调用:使用self.name方法,本例中就是self. reg_buf
  3. 在实例化模型后调用:使用net.buffers()方法。

其他知识

实际上,Pytorch定义的模型用OrderedDict()方式记录这三种类型,分别保存在self._modules, self._parameters 和self.buffer三个私有属性中

在模型实例化后可以用以下方法看三个私有属性中的变量
net.modules()
net.parameters()
net.buffers()

self._parameters 和net.parameters() 的返回值并不相同,self._parameters只记录了使用self.register_parameter()定义的参数,而net.parameters()返回所有可学习参数。

参考:
[1]Pytorchnn.Module中的self.register_buffer()解析

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytorch中nn.Module中的self.register_buffer解释 的相关文章

  • PyTorch 中复数矩阵的行列式

    有没有办法在 PyTorch 中计算复矩阵的行列式 torch det未针对 ComplexFloat 实现 不幸的是 目前尚未实施 一种方法是实现您自己的版本或简单地使用np linalg det 这是一个简短的函数 它计算我使用 LU
  • GWT:在另一个模块内调用RPC服务

    我有一个模块B 它继承了模块A 当我从A内部调用RPC服务时 它们工作正常 但是当我在B中调用A的服务时 RPC调用总是失败 我错过了什么吗 预先感谢您的任何帮助 我在这里找到了我的问题的答案 http blog cloudglow com
  • 使 CUDA 内存不足

    我正在尝试训练网络 但我明白了 我将批量大小设置为 300 并收到此错误 但即使我将其减少到 100 我仍然收到此错误 更令人沮丧的是 在 1200 个图像上运行 10 epoch 大约需要 40 分钟 有什么建议吗 错了 我怎样才能加快这
  • 区分由于找不到模块而导致的 ImportError 或 python 中模块本身的错误导入?

    我在 python 中有一些模块 它们是动态导入的 并且都具有相同的结构 plugin py models py tests py 在管理代码中 我想导入这些子模块 但例如 models py 或tests py 不是强制性的 所以我可以有
  • 如何在 Webpack 5 中为 jsonwebtoken 填充缓冲区

    我正在升级到 Webpack 5 并且 jsonwebtoken 包存在问题 https github com auth0 node jsonwebtoken https github com auth0 node jsonwebtoken
  • 如何计算 CNN 第一个线性层的维度

    目前 我正在使用 CNN 其中附加了一个完全连接的层 并且我正在使用尺寸为 32x32 的 3 通道图像 我想知道是否有一个一致的公式可以用来计算第一个线性层的输入尺寸和最后一个卷积 最大池层的输入 我希望能够计算第一个线性层的尺寸 仅给出
  • 什么时候在 Objective-C 中使用 self ?

    现在我使用 Objective C 已有 5 个多月了 我的第一个应用程序也在 App Store 上发布了 但我仍然对该语言的核心功能存有疑问 我什么时候应该使用self访问 iVars 以及何时不访问 当释放一个插座时 你写self o
  • 无法获取 GED 日志缓冲区,错误(0)

    我的 Android 项目有一个大问题 那就是error Failed to get GED Log Buf err 0 我真的不知道该怎么办以及如何解决它 有人可以帮我吗 非常感谢 Find Advanced logging在你手机的De
  • Pytorch Tensor 如何获取元素索引? [复制]

    这个问题在这里已经有答案了 我有 2 个名为x and list它们的定义如下 x torch tensor 3 list torch tensor 1 2 3 4 5 现在我想获取元素的索引x from list 预期输出是一个整数 2
  • 如何使用pytorch构建多任务DNN,例如超过100个任务?

    下面是使用 pytorch 为两个回归任务构建 DNN 的示例代码 这forward函数返回两个输出 x1 x2 用于大量回归 分类任务的网络怎么样 例如 100 或 1000 个输出 对所有输出 例如 x1 x2 x100 进行硬编码绝对
  • 如何有效地对一个数组中某个值在另一个数组中的位置出现的次数求和

    我正在寻找一种有效的 for 循环 避免解决方案来解决我遇到的数组相关问题 我想使用一个巨大的一维数组 A gt size 250 000 用于一维索引的 0 到 40 之间的值 以及用于第二维索引的具有 0 到 9995 之间的值的相同大
  • 切换 git 分支时如何处理 vim 缓冲区?

    因此 我在 vim 缓冲区中打开了大量文件 并且正在使用 git 处理功能分支 突然 我意识到我需要恢复到主分支来进行快速修复 提交后 我将 vim 会话保持打开状态并切换回 master 分支 但是 当我尝试从缓冲区加载我需要的文件时 我
  • 错误:在 Google 应用引擎上部署节点 js 时找不到模块“/workspace/server.js”

    经过一周的搜索 我无法找到适用于我的 Node js 应用程序的应用程序引擎部署问题的解决方案 我已经用这个替换了原来的代码Express 的 hello world 示例 https expressjs com en starter he
  • Emacs 退出终端

    在 Emacs 中运行终端模式时使用M x term using C x C o我无法切换到另一个缓冲区来继续处理事情 我知道这是可能的M x shell但使用此命令时 shell 的某些方面不起作用 less more 手册页等 我想知道
  • 如何全局公开 es6 模块

    我需要编写一个可在全局窗口上使用的模块 我使用 es6 创建模块 我定义的每个类都有它自己的文件 我正在使用 webpack 来 babelify 并捆绑这些类 我的模块的入口点也是包含要公开的全局的文件 我尝试了各种方法来实现这一点 包括
  • Node js:如何获取文件签名标头而不是 mime 类型?

    我下载了this https www npmjs com package mime types我的 Node js 项目的模块 它似乎在某种程度上工作正常 如果你console log mime lookup pathToFile 它返回文
  • Pytorch GPU 使用率低

    我正在尝试 pytorch 的例子https pytorch org tutorials beginner blitz cifar10 tutorial html https pytorch org tutorials beginner b
  • Pytorch“展开”等价于 Tensorflow [重复]

    这个问题在这里已经有答案了 假设我有大小为 50 50 的灰度图像 在本例中批量大小为 2 并且我使用 Pytorch Unfold 函数 如下所示 import numpy as np from torch import nn from
  • PyTorch 中的连接张量

    我有一个张量叫做data形状的 128 4 150 150 其中 128 是批量大小 4 是通道数 最后 2 个维度是高度和宽度 我有另一个张量叫做fake形状的 128 1 150 150 我想放弃最后一个list array从第 2 维
  • C# 中的类和模块有什么用

    有人可以解释一下类和模块之间的区别吗 你什么时候使用其中一种而不是另一种 我正在使用 C 更新 我的意思是相当于 VB 模块的 C 版本 这在很大程度上取决于您所指的 模块 Visual Basic 的模块 C 中没有真正等效的 VB Ne

随机推荐

  • 【MATLAB】(二)基本使用拾遗

    本文目录 0 前期教程1 前言2 输入输出2 1 input2 2 load2 3 importdata2 4 disp2 5 fopen amp fclose2 6 fscanf amp fprintf2 7 textread amp t
  • 【Linux】Ubuntu使用入门

    前言 本文主要记录一些Ubuntu中常用的基本操作 xff0c 记录自己的实践经历 xff0c 不断更新 xff01 xff01 xff01 0 基本文件交互 在Ubuntu系统中 xff0c 右键是没有创建文件的选项的 xff0c 只能创
  • 【嵌入式模块】MPU6050

    文章目录 0 前言1 MPU6050概述1 1 基本概述1 2 引脚和常用原理图 2 代码3 姿态解算3 1 欧拉角 amp 旋转矩阵3 2 DMP 3 校正 0 前言 作为惯性传感器中入门级别的器件 xff0c MPU6050凭借它出色的
  • 【PyQt】PyQt5进阶——串口上位机及实时数据显示

    文章目录 0 前期教程1 前言2 串口部分 QtSerialPort3 绘图部分3 1 QCustomPlot3 2 QtChart3 3 QWT3 4 Qt Designer中如何使用 参考链接 0 前期教程 Python PyQt5入门
  • 【软件相关】Proteus仿真STM32记录

    文章目录 0 前期教程1 前言2 先说说建议的流程3 需要注意的事项3 1 供电网配置不要忘了3 2 ADC模块的使用3 3 元器件查询手册 4 一些小技巧4 1 快速添加标号4 2 出现诡异问题的一种解决思路 0 前期教程 软件相关 Pr
  • 【嵌入式】Modbus实践

    前言 最近接了一个项目 xff0c 需要使用Modbus协议 xff0c 虽然之前有所耳闻 xff0c 但一直没有实操过 xff0c 但实践之后发现其实还是很简单的 xff0c 我认为它本质上就是对串口传输进行 二次封装 建议的入门顺序 大
  • 正则 ^ , \G , \A 区别

    正则 G A 区别 如图
  • c的string库常用函数记录

    1 strcat x xff0c y 将字符串y拼接在字符串x后面 2 strlen xff08 x xff09 返回字符串x的长度 3 strcopy xff08 x xff0c y xff09 将y复制给x xff08 类似于x 61
  • ROS发行版列表完整版

    官方原文 xff1a http wiki ros org Distributions Distro Release date EOL date ROS Melodic Morenia Recommended May 23rd 2018 Ma
  • React styled-components(三)—— 高级特性

    styled components 高级特性 样式继承嵌套设置主题 样式继承 新建 Demo js 文件 xff1a span class token keyword import span React span class token p
  • (九)Java算法:快速排序(详细图解)

    目录 一 前言1 1 概念1 2 算法过程 二 maven依赖三 流程解析3 1 全部数据分区3 2 左边数据分区3 3 右边数据分区 四 编码实现结语 一 前言 1 1 概念 快速排序 xff1a 用数组的第一个数作为基准数据 xff0c
  • 【Linux】树莓派控制光强传感器(C、python手把手教学)

    本文分为三个部分 xff1a 1 光强传感器说明 2 程序解读 3 前期准备 xff08 放在最后一部分 xff0c 供小白查阅借鉴 xff0c 包括本文需要用到的wiringPi库函数 xff09 一 光强传感器说明 1 TSL256x
  • Ubuntu安装VNC,配置多用户vnc连接Ubuntu,开机自启vnc命令

    Ubuntu安装VNC span class token function sudo span span class token function apt span update span class token function sudo
  • 解决登陆github慢的问题

    解决方法 首先本文解决的问题是Github网站可以访问 xff0c 但是由于网络代理商的原因 xff0c 造成访问速度很慢 Ping www github com 时 xff0c 速度只有200多ms 解决思路 xff1a 1 可以花钱购买
  • 什么是反卷积(快速理解)

    什么是反卷积 参考博客 我们知道输入图像通过卷积神经网络 xff08 CNN xff09 提取特征后 xff0c 输出的尺寸往往会变小 xff0c 而又是我们需要将图像恢复到原来的尺寸以便进行进一步的计算 xff0c 整个扩大图像尺寸 xf
  • 李雅普诺夫稳定(内部稳定)与BIBO稳定(外部稳定)的关系

  • 情绪识别论文阅读

    情绪识别论文阅读 情感脑机接口研究综述一种基于情感脑电信号时 频 空特征的3D密集连接网络 1 吕宝粮 张亚倩 郑伟龙 情感脑机接口研究综述 J 智能科学与技术学报 2021 3 01 36 48 情感脑机接口研究综述 情感脑机接口研究面临
  • 一文详细介绍情绪识别常用的数据集

    一文详细介绍情绪识别常用的数据集 SEED采集情况文件介绍 SEED IV采集情况文件介绍 CIAIC多模态情感识别数据采集情况文件介绍 DEAP采集情况文件情况 SEED V采集情况文件情况 本文详细介绍了脑机接口情绪识别常用的数据集 x
  • 父子进程虚拟地址空间情况

    父子进程虚拟地址空间情况 笔记来源于牛客网 Linux多进程开发 The child process and the parent process run in separate memory spaces At the time of f
  • Pytorch中nn.Module中的self.register_buffer解释

    self register buffer作用解释 今天遇到了这样一种用法 xff0c self register buffer name Tensor xff0c 该方法的作用在于定义一组参数 该组参数在模型训练时不会更新 xff08 即调