pytorch学习笔记5

transform
在这里插入图片描述
本质上作用是将图片通过transform这个这个工具箱获取想要的结果
在这里插入图片描述
tensor就是一个包含神经网络需要的一些理论基础的参数

from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import  Image
#tensor数据类型
#通过transform.TeTensor去解决两个问题
#1.transform如何使用
#2.为什么需要tensor类型
img_path=r'D:\python practice demo\pythonProject4\hymenoptera_data\train\ants\0013035.jpg'
img=Image.open(img_path)
tesortrans=transforms.ToTensor()
tensorImg=tesortrans(img)#转为tensor
writer=SummaryWriter('logs')
writer.add_image('tensorimg',tensorImg)
writer.close()

tensor 类有许多内部属性和钩子,这些属性和钩子主要用于管理张量的内部状态、梯度计算和其他高级特性。

也就是在控制台可以看到的这些参数
在这里插入图片描述
_backward_hooks:
作用: 这个属性是一个钩子列表,用于在执行反向传播时调用。这些钩子可以在张量的梯度计算之前或之后执行自定义的操作。
用途: 常用于调试、修改梯度或者在特定操作发生时记录信息。

_base:
作用: 当一个张量是从另一个张量派生出来的(例如通过切片操作),_base 属性指向源张量。
用途: 帮助跟踪张量之间的依赖关系,特别是在内存管理和梯度计算时。

_cdata:
作用: 这是一个内部的 C 语言指针,指向张量在底层库(通常是 C++ 实现的 PyTorch 核心)中的具体数据结构。
用途: 主要用于高效访问和操作张量数据,在高级别 Python 代码中一般不直接使用。

_grad:
作用: 这个属性保存了张量的梯度。如果一个张量需要计算梯度,_grad 将包含其对应的梯度张量。
用途: 用于反向传播算法中的梯度存储和更新。

_grad_fn:
作用: 这个属性指向创建当前张量的函数。如果张量是通过某些操作生成的,这个属性记录了生成它的操作。
用途: 在反向传播中用于构建计算图,以便正确地计算梯度。

_has_symbolic_sizes_strides:
作用: 这个布尔值属性表示张量是否具有符号化的尺寸和步长。
用途: 通常在动态形状推理或符号计算中使用,以便处理不确定尺寸的张量。

_python_dispatch:
作用: 这个属性用于控制张量操作的 Python 层调度。通过这个属性,可以自定义或重载张量操作。
用途: 在开发自定义张量类型或扩展 PyTorch 功能时很有用。

_version:
作用: 这是一个内部计数器,用于跟踪张量的修改次数。每次张量的内容发生变化时,这个计数器都会递增。
用途: 帮助实现版本控制和缓存机制,以确保在优化过程中能够正确地使用和更新张量数据。

在 PyTorch 中,钩子(hook)是一种非常灵活的机制,允许用户在某些事件发生时插入自定义的操作。钩子主要有以下几种用途:

自定义梯度计算:
可以在张量的梯度计算过程中插入钩子,以便在计算梯度之前或之后执行特定操作。这对于修改梯度、调试或记录中间梯度信息非常有用。
例如,通过 register_hook 方法,可以在张量上注册一个钩子函数,当这个张量的梯度被计算时,钩子函数会被调用:

tensor = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
tensor.register_hook(lambda grad: print(grad))

模块级钩子:
PyTorch 允许在神经网络模块(如 nn.Module)的前向传播和反向传播过程中插入钩子。这对于调试网络、记录中间结果或修改数据流非常有用。
前向钩子(forward hook)在模块的前向传播开始时触发,前向后钩子(forward pre-hook)在前向传播之前触发,反向钩子(backward hook)在反向传播过程中触发。

model = MyModel()
def forward_hook(module, input, output):print(f"Forward hook: {module}")handle = model.layer.register_forward_hook(forward_hook)

调试和监控:
通过钩子,可以在模型训练或推理时监控中间层的输出、梯度等。这有助于理解模型的内部工作机制,排查问题或优化性能。
例如,记录每层的输出:

activations = []
def forward_hook(module, input, output):activations.append(output)handle = model.layer.register_forward_hook(forward_hook)

实现自定义操作:

使用钩子可以在标准的前向和反向传播之外实现自定义的操作。这对于需要特定功能或操作的研究和开发非常有帮助。
例如,可以在反向传播过程中对梯度进行剪裁或归一化:

def clip_gradient(grad):return grad.clamp(-1, 1)tensor = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
tensor.register_hook(clip_gradient)

总结来说,钩子提供了一种在 PyTorch 模型的执行过程中插入自定义代码的方法,使得用户可以灵活地调试、监控和扩展模型的功能。这对于开发复杂的深度学习模型和实验新的算法非常有帮助。

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

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

相关文章

最新h5st(4.7.2)参数分析与纯算法还原(含算法源码)

文章目录 1. 写在前面2. 加密分析3. 算法还原 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

22 、系统安全

新的服务器到手,部署服务器初始化。 1、配置ip地址 网关dns解析(static)内网和外网。 2、安装源,外网(在线即可),内网(只能用源码包编译安装)。 3、磁盘分区&#xff…

k8s 1.28.x 配置nfs

1.安装nfs,在每个节点上安装 yum install -y nfs-utils 2.创建共享目录(主节点上操作) mkdir -p /opt/nfs/k8s 3.编写NFS的共享配置 /opt/nfs/k8s *(rw,no_root_squash) #*代表对所有IP都开放此目录,rw是读写 4.启动nfs systemctl enable nfs-ser…

十_信号11 - 函数sigsetjmp() 和 siglongjmp()

也就是说,正常情况下,当捕捉到一个信号,并调用该信号的信号处理程序时,被捕捉的信号会被加入到当前进程的信号屏蔽字中,以防止在本次信号处理程序还没有完成的时候,再次触发该信号, 发生重入。 …

Py列表(list)

目录 正向索引: 反向索引: 嵌套列表: 修改列表中的值 列表常用的方法 实例 练习: 正向索引: 从0开始,依次递增。第一个元素的索引为0,第二个元素的索引为1,依此类推。 列表的下标…

JS-09-es6常用知识1

目录 1 模板字符串 1.1 模板字符串基本用法 1.2 模板字符串解决了一些痛点 2 解构赋值 2.1 对象的解构赋值 2.2 函数参数的解构赋值 2.3 补写:属性的简写 3 rest参数 3.1 arguments 3.2 rest参数 3.3 补充:判断数据类型 4 箭头函数 4.1 …

传输中的串扰(八)

串扰指的是有害信号从一个线网传递到相邻线网上。通常把噪声源所在的线网称为动态线或攻击线网,而把有噪声形成的线网称为静态线或受害线网。 静态线上的噪声电压的表现与信号电压完全一样。一旦在静态线上产生噪声电压,它们就会传播并在阻抗突变处出现反…

服务器数据恢复—服务器raid常见故障表现原因解决方案

RAID(磁盘阵列)是一种将多块物理硬盘整合成一个虚拟存储的技术,raid模块相当于一个存储管理的中间层,上层接收并执行操作系统及文件系统的数据读写指令,下层管理数据在各个物理硬盘上的存储及读写。相对于单独的物理硬…

外卖点餐系统 springboot+vue+element-ui

免费获取方式↓↓↓ 项目介绍038: http://localhost:8080/ 账号:weiguanke 123 系统登陆后展示 用户可视界面 – 登录页面 – 首页: – 店铺查找页面: 店铺查找 – 店铺页面 店铺管理者可视页面 – 店铺页面 店铺管理员…

Redis之持久化、集群

1. Redis持久化 Redis为什么需要持久化?因为Redis的数据我们都知道是存放在内存中的,那么每次关闭或者机器断电,我们的数据旧丢失了。 因此,Redis如果想要被别人使用,这个问题就需要解决,怎么解决呢?就是说我们的数…

Windows通过cmd运行快速启动应用

Windows如何通过cmd运行快速启动应用? 在Windows操作系统中,可以通过配置环境变量的方式将文件的路径配置到环境变量的path中,配置完成后可以在cmd中输入对应的应用名称即可启动应用,具体操作如下: 1. 添加应用程序路径…

力扣62. 不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径? 示例 1&…

FJSP:蛇鹫优化算法(SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

详细介绍 FJSP:蛇鹫优化算法(Secretary bird optimization algorithm,SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码-CSDN博客 完整MATLAB代码 FJSP:蛇鹫优化算法&#xff…

spoon工具的常用基础操作

一些常用转换工具 1、emp表输入->excel表输出 emp表输入,可以进行预览查看数据有没有过来excel表输出 成功执行后,可以到保存的excel位置进行查看。 2、excel输入->表输出 运行转换后可以在oracle进行查看是否有成功创建这个表 3、对部门最高…

Java 22的FFM API,比起Java 21的虚拟线程

哪个对Java未来的发展影响更大?两个 Java 版本中的重要特性:Java 21 的虚拟线程和 Java 22 的 FFM API。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习编程,不妨点个关注,给…

原生APP开发和Flutter开发的比较

原生APP开发和Flutter开发各有优缺点,适用于不同的场景和需求。下面是两者的详细比较,从开发语言、性能、开发效率、维护和更新、社区和支持等多个方面进行分析。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。…

【康耐视国产案例】智能AI相机机器视觉精准快速实现包裹标签的智能粘贴

康耐视推出的3D-A1000是专业的、匹配物流行业各类分拣机及包裹检测应用的全功能视觉检测系统,其能够准确检测分拣机上是否有包裹、包裹是否超出边界、空车检测、是否有遗留物品等。由于搭载了专利的三维结构光技术,产品具有更强大的创新性以满足持续更新…

综合交易模型--雪球跟单参数说明支持qmt,同花顺

经过测试,目前完成了这个策略。支持多策略,支持全市场,包括股票,etf,可转债 全部的参数 { "雪球跟单":"跟单原理", "原理":"比重变大默认买入,变小默认卖出,持股…

fintuning chatglm3

chatglm3介绍 ChatGLM3-6B 是 ChatGLM 系列最新一代的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性: 更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用…

【uni-app】Pinia 持久化

小程序端 Pinia 持久化 说明:Pinia 用法与 Vue3 项目完全一致,uni-app 项目仅需解决持久化插件兼容性问题。 持久化存储插件 安装持久化存储插件: pinia-plugin-persistedstate pnpm i pinia-plugin-persistedstate插件默认使用 localStor…