pytorch学习笔记(九):PyTorch结构介绍
2017-06-15 13:25
387 查看
PyTorch结构介绍
对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握。水平有限,如有错误,欢迎指错,谢谢!
几个重要的类型
和数值相关的
TensorVariable
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(下面会谈到)中添加模型参数方便。
模型相关的
FunctionModule
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。
相关文章推荐
- pytorch学习笔记(九):PyTorch结构介绍
- Pytorch学习笔记(一):pytorch的安装-Ubuntu14.04
- torch学习笔记--tensor介绍2,对tensor的结构
- pytorch学习笔记(十五):pytorch 源码编译碰到的坑总结
- pytorch学习笔记(七):pytorch hook 和 关于pytorch backward过程的理解
- (继)pytorch中的pretrain模型网络结构修改
- pytorch学习笔记(七):pytorch hook 和 关于pytorch backward过程的理解
- pytorch学习笔记(十六):pytorch 写代码时应该注意
- J2ME结构与相关规范介绍
- linux目录结构介绍
- JBoss目录结构说明和功能介绍
- 微软Office系列文档结构的概要介绍.
- Unix/Linux操作系统的体系结构及系统调用介绍
- 3,Composite UI Application Block (CAB) 结构介绍
- symbian系统结构介绍(转)
- 第一章 java结构介绍
- JBoss目录结构说明和功能介绍
- J2ME结构与相关规范介绍
- MES结构介绍
- C#学习笔记 结构介绍