pytorch之关于PyTorch结构介绍

 更新时间:2023年09月08日 09:47:59   作者:u012436149  
这篇文章主要介绍了pytorch之关于PyTorch结构的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

PyTorch结构介绍

对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握。

几个重要的类型

和数值相关的

  • Tensor
  • Variable
  • Parameter
  • buffer(这个其实不能叫做类型,其实他就是用来保存tensor的)

Tensor

PyTorch 中的计算基本都是基于 Tensor 的,可以说是 PyTorch 中的基本计算单元。

Variable

Tensor 的一个 Wrapper ,其中保存了 Variable 的创造者, Variable 的值(tensor),还有 Variable 的梯度( Variable )。

自动求导机制的核心组件,因为它不仅保存了 变量的值,还保存了变量是由哪个 op 产生的。这在反向传导的过程中是十分重要的。

Variable 的前向过程的计算包括两个部分的计算,一个是其值的计算(即,Tensor的计算),还有就是 Variable 标签的计算。标签指的是什么呢?如果您看过PyTorch的官方文档 Excluding subgraphs from backward 部分的话,您就会发现 Variable 还有两个标签: requires_grad volatile 。标签的计算指的就是这个。

Paramete:

这个类是 Variable 的一个子集, PyTorch 给出这个类的定义是为了在 Module (下面会谈到)中添加模型参数方便。

模型相关的

  • Function
  • Module

Function

如果您想在 PyTorch 中自定义 OP 的话,您需要继承这个类,您需要在继承的时候复写 forward backward 方法,可能还需要复写 __init__ 方法(由于篇幅控制,这里不再详细赘述如果自定义 OP )。您需要在 forward 中定义 OP ,在 backward 说明如何计算梯度。关于 Function ,还需要知道的一点就是, Function forward backward 方法中进行计算的类型都是 Tensor ,而不是我们传入的Variable。计算完forward和backward之后,会包装成Varaible返回。这种设定倒是可以理解的,因为OP是一个整体嘛,OP内部的计算不需要记录creator

Module

这个类和 Function 是有点区别的,回忆一下,我们定义 Function 的时候, Funciton 本身是不需要变量的,而 Module 是变量和 Function 的结合体。在某些时候,我们更倾向称这种结构为 Layer 。但是这里既然这么叫,那就这么叫吧。

Module 实际上是一个容器,我们可以继承 Module ,在里面加几个参数,从而实现一个简单全连接层。我们也可以继承 Module ,在里面加入其它 Module ,从而实现整个 VGG 结构。

关于hook

PyTorch中注册的hook都是不允许改变hook的输入值的

下面对PyTorch中出现hook的地方做个总结:

* Module : register_forward_hook, register_backward_hook

注意:forward_hook不能用来修改Module的输出值,它的功能就像是安装个监视器一样。

我们可以用forward_hook和visdom来监控我们Module的输出。

backward_hook和与 Variable 的功能是类似的,将和 Variable register_hook 一起介绍。

  • Variable: register_hook
  • Variable的register_hook注册的是一个 backward hook backward hook 是在BP的过程中会用到的。可以用它来处理计算的梯度。

关于hook较为详尽的介绍

foward过程与backward过程

forward

以一个Module为例:

  • 1. 调用module的 call 方法
  • 2. module call 里面调用 module forward 方法
  • 3. forward 里面如果碰到 Module 的子类,回到第1步,如果碰到的是 Function 的子类,继续往下
  • 4. 调用 Function call 方法
  • 5. Function call 方法调用了Function的 forward 方法。
  • 6. Function forward 返回值
  • 7. module forward 返回值
  • 8. 在 module call 进行 forward_hook 操作,然后返回值。

backward

关于backward

总结

PyTorch基本的操作是 OP ,被操作数是 Tensor

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python实现扫描指定目录下的子目录及文件的方法

    Python实现扫描指定目录下的子目录及文件的方法

    这篇文章主要介绍了Python实现扫描指定目录下的子目录及文件的方法,需要的朋友可以参考下
    2014-07-07
  • Python中的getopt函数使用详解

    Python中的getopt函数使用详解

    这篇文章主要介绍了Python中的getopt函数使用详解,是Python进阶学习中的重要知识,需要的朋友可以参考下
    2015-07-07
  • Python关于迭代器的使用

    Python关于迭代器的使用

    这篇文章主要介绍了Python关于迭代器的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 使用Python操作MySQL的一些基本方法

    使用Python操作MySQL的一些基本方法

    这篇文章主要介绍了使用Python操作MySQL的一些基本方法,Python+MySQL也是服务器端快速开发的一种绝佳搭配方案,需要的朋友可以参考下
    2015-08-08
  • Python实现目录遍历和内容获取的完整指南

    Python实现目录遍历和内容获取的完整指南

    在软件开发中,目录遍历和文件系统操作是极其常见且重要的任务,本文将深入探讨Python中获取目录内容的各种方法,展示如何在不同场景下选择和使用最合适的工具,希望对大家有所帮助
    2025-09-09
  • python3中超级好用的日志模块-loguru模块使用详解

    python3中超级好用的日志模块-loguru模块使用详解

    loguru默认的输出格式是上面的内容,有时间、级别、模块名、行号以及日志信息,不需要手动创建 logger,直接使用即可,另外其输出还是彩色的,看起来会更加友好,这篇文章主要介绍了python3中超级好用的日志模块-loguru模块使用详解,需要的朋友可以参考下
    2022-11-11
  • python的内存管理和垃圾回收机制详解

    python的内存管理和垃圾回收机制详解

    这篇文章主要介绍了python内存管理和垃圾回收机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python多线程的退出控制实现

    Python多线程的退出控制实现

    这篇文章主要介绍了Python多线程的退出控制实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • python入门课程第三讲之编码规范知多少

    python入门课程第三讲之编码规范知多少

    这篇文章主要介绍了python入门课程第三讲之编码规范知多少,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Python元类Metaclass初探:理解类的类

    Python元类Metaclass初探:理解类的类

    文章介绍了Python中的元类,解释了类和元类的关系,元类的创建过程和关键方法,详细探讨了元类的应用场景如自动注册类、强制命名规范、实现单例模式等,同时,文章还对比了元类和装饰器的特性,并给出了使用元类时的注意事项,感兴趣的朋友一起看看吧
    2026-04-04

最新评论