zoukankan      html  css  js  c++  java
  • 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。标签的计算指的就是这个。

    Parameter:
    这个类是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。
    ---------------------
    作者:ke1th
    来源:CSDN
    原文:https://blog.csdn.net/u012436149/article/details/70145598
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    java设计模式之组合模式
    java设计模式之建造者
    设计模式之单例
    oracle 中update select 和连接字符串配合使用
    策略模式之使用场景
    javascript面向对象学习笔记——创建对象(转)
    grunt自动化工具
    【grunt整合版】30分钟学会使用grunt打包前端代码
    浅谈Hybrid技术的设计与实现
    WEB服务器、应用程序服务器、HTTP服务器区别(转)
  • 原文地址:https://www.cnblogs.com/jfdwd/p/11270125.html
Copyright © 2011-2022 走看看