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 模型的执行过程中插入自定义代码的方法,使得用户可以灵活地调试、监控和扩展模型的功能。这对于开发复杂的深度学习模型和实验新的算法非常有帮助。

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

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

相关文章

Linux系统上的磁盘扩展总结

目录 一、前言 二、相关基础知识 (1)术语理解 (2)相关命令学习 1、磁盘管理相关命令 2、LVM管理相关命令 三、磁盘操作场景汇总 (1)添加新硬盘后挂载到已有目录进行扩容 (2&#xff09…

Python 二叉数的实例化及遍历

首先创建一个这样的二叉树,作为我们今天的实例。实例代码在下方。 #创建1个树类型 class TreeNode:def __init__(self,val,leftNone,rightNone):self.valvalself.leftleftself.rightright #实例化类 node1TreeNode(5) node2TreeNode(6) node3TreeNode(7) node4Tre…

【数据结构与算法】七大排序算法(下)

【数据结构与算法】七大排序算法(下) 🥕个人主页:开敲🍉 🔥所属专栏:数据结构与算法🍅 🌼文章目录🌼 2.3 交换排序 2.3.1 冒泡排序 2.3.2 快速排序 2.3.3 快速排序(非递归) 2.4 归并…

【一刷《剑指Offer》】面试题 30:最小的 k 个数

牛客对应题目链接:最小的K个数_牛客题霸_牛客网 (nowcoder.com) 力扣对应题目链接:LCR 159. 库存管理 III - 力扣(LeetCode) 核心考点 : topK 问题。 一、《剑指Offer》内容 二、分析题目 1、排序(O(Nlo…

数据结构之二叉搜索树(TreeSetTreeMap)

目录 一.搜索树 1.1概念 1.2适用场景 2.二叉搜索树的基本操作 2.1二叉搜索树的定义 2.2查找 2.1.1基本思路 2.3插入 2.3.1基本思路 2.4删除 2.4.1基本思路 2.5遍历 2.6性能分析 二.TreeSet Map和Set 1.概念 2.模型 1.定义 2.基本操作 三.TreeMap 1.定义 2.基…

C语言笔记第9篇:字符函数和字符串函数

在编程的过程中,我们经常要处理字符和字符串,为了方便操作字符和字符串,C语言标准库中提供了一系列库函数,接下来我们就学习一下这些函数。 一、字符函数 1、字符分类函数 C语言中有一系列的函数是专门做字符分类的,…

MyBatis一、MyBatis简介

MyBatis一、MyBatis简介 MyBatis 简介MyBatis 定义MyBatis 历史MyBatis 特性1. 灵活性和易用性2. 性能优化3. 易于集成4. 支持多种数据库5. 插件机制6. 其他特性 MyBatis 下载和其他持久化层技术对比 MyBatis 简介 MyBatis 定义 MyBatis 是一个优秀的持久层框架,它…

240602-通过命令行实现HuggingFace文件上传

A. 登录显示 A.1 MacOS A.2 Windows B. 操作步骤 B.1 操作细节 要通过命令行将文件上传到 Hugging Face,可以使用 huggingface-cli 工具。以下是详细步骤: 安装 huggingface_hub 包: 首先,确保已经安装了 huggingface_hub 包。可…

MySQL—函数—数值函数(基础)

一、引言 首先了解一下常见的数值函数哪些?并且直到它们的作用,并且演示这些函数的使用。 二、数值函数 常见的数值函数如下: 注意: 1、ceil(x)、floor(x) :向上、向下取整。 2、mod(x,y):模运算&#x…

Wpf 使用 Prism 开发MyToDo应用程序

MyToDo 是使用 WPF ,并且塔配Prism 框架进行开发的项目。项目中进行了前后端分离设计,客户端所有的数据均通过API接口获取。适合新手入门学习WPF以及Prism 框架使用。 首页统计以及点击导航到相关模块功能待办事项增删改查功能备忘录增删改查功能登录注册…

跨模型知识融合:大语言模型的知识融合

大语言模型(LLMs)在多个领域的应用日益广泛,但确保它们的行为与人类价值观和意图一致却充满挑战。传统对齐方法,例如基于人类反馈的强化学习(RLHF),虽取得一定进展,仍面临诸多难题&a…

7-18 对象关系映射(orm_name)---PTA实验C++

一、题目描述 一开始看到对象关系映射,其实我是拒绝的。这三个词凑一块,能是给C初学者的题吗? 再仔细读需求,才发现在课设项目已经用过这功能。Object Relational Mapping(ORM)就是面向对象(O…

大降分!重邮计算机专硕复试线大降50分!重庆邮电计算机考研考情分析!

重庆邮电大学(Chongqing University of Posts and Telecommunications)简称重邮,坐落于中国重庆市主城区南山风景区内,是中华人民共和国工业和信息化部与重庆市人民政府共建的教学研究型大学,入选国家“中西部高校基础…

【30天精通Prometheus:一站式监控实战指南】第13天:graphite_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们👋   欢迎加入【30天精通Prometheus】专栏!📚 在这里,我们将探索Prometheus的强大功能,并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。🚀   Prometheus是云原生和DevOps的…

企业im即时通讯WorkPlus私有化部署适配国产信创环境

在信息化时代,高效的沟通和协作对于企业的运营至关重要。企业IM即时通讯平台提供了一种便捷、实时的沟通工具,旨在改善企业的内部和外部沟通效率。然而,随着企业对数据安全性和隐私保护的要求不断提高,许多企业开始选择私有化部署…

【Qt知识】disconnect

在Qt框架中,disconnect函数用于断开信号与槽之间的连接。当不再需要某个信号触发特定槽函数时,或者为了防止内存泄漏和重复执行问题,你可以使用disconnect来取消这种关联。disconnect函数的基本用法可以根据不同的需求采用多种形式&#xff0…

【ORB_SLAM系列3】—— 如何在Ubuntu18.04中使用自己的单目摄像头运行ORB_SLAM3(亲测有效,踩坑记录)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ORB_SLAM3源码编译二、ORB_SLAM3实时单目相机测试1. 查看摄像头的话题2. 运行测试 三. 运行测试可能的报错1. 报错一(1) 问题描述(2) 原因分析(3) 解决 2. …

Windows下如何把Oracle从C盘整体迁移到D盘?

(一)写这篇文章的起因 这篇文章适合刚接触的技术小白follow操作,整理文章不易,大家多多点赞转发 起因是昨天有会员在群里发问,客户要把Oracle整个目录从C盘挪到D盘怎么弄 客户那边的人把Oracle整个程序数据文件都安装…

使用 Kali Linux 实现 Smurf 攻击

一、介绍 Smurf攻击是一种分布式拒绝服务(DDoS)攻击,利用IP协议中的ICMP(Internet Control Message Protocol)请求和网络的广播特性,使目标系统被大量ICMP回复包淹没,从而导致系统无法正常提供…

ZDH-数据管理模块

目录 主题 项目源码 预览地址 安装包下载地址 数据管理服务 数据资源管理 数据资源权限 数据资源血缘 总结 感谢支持 主题 本篇文章主要介绍ZDH-数据管理服务及应用场景 项目源码 zdh_web: GitHub - zhaoyachao/zdh_web: 大数据采集,抽取平台 预览地址 后台管理…