pytorch框架的详细介绍与应用详解

 更新时间:2023年04月10日 10:59:23   作者:帅奇奇的博客  
这篇文章主要介绍了pytorch框架的详细介绍与应用,Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库,在机器学习和其他数学密集型应用有广泛应用,本文给大家详细讲解,需要的朋友可以参考下

pytorch框架的详细介绍与应用

最近小阿奇在搭建模型的时候,发现pytorch框架十分的方便好用。所以特地整理了这个帖子,帮助自己捋一下思路打个基础,也方便大家交流学习。很用心的一篇博客哦~

一.pytorch概述

1.pytorch概念

Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库,在机器学习和其他数学密集型应用有广泛应用。与Tensorflow的静态计算图不同,pytorch的计算图是动态的,可以根据计算需要实时改变计算图。

2.pytorch与tensorflow的区别

a.pytorch相对于tensorflow出现的较晚一些,主要是针对深度神经网络而开发出来,这几年发展也是十分不错;tensorflow出现的较早,它的优点是分布式计算,在面临较大数据时相对效率较高;
b.pytorch是动态框架,tensorflow是静态框架,主要区别就是静态框架在构建计算图的时候提前构建好,之后则无法改变,固定了计算的流程,势必带来了不灵活性,如果我们要改变计算的逻辑,或者随着时间变化的计算逻辑,这样的动态计算TensorFlow是实现不了的;而动态框架可以根据具体计算情况进行改变
c.tensorflow的库相对完备齐全,而pytorch还在完善中;所以tensorflow在可视化方面十分出色;
d.pytorch对python十分友好,更加python化的框架,而tensorflow的话更加像独立的语言和框架

3.pytorch包含的内容

1. overview

pytorch 由低层到上层主要有三大块功能模块,如下图所示

1.1 张量计算引擎(tensor computation)
Tensor 计算引擎,类似 numpy 和 matlab,基本对象是tensor(类比 numpy 中的 ndarray 或 matlab 中的 array)。除提供基于 CPU 的常用操作的实现外,pytorch 还提供了高效的 GPU 实现,这对于深度学习至关重要。

1.2 自动求导机制(autograd)
由于深度学习模型日趋复杂,因此,对自动求导的支持对于学习框架变得必不可少。pytorch 采用了动态求导机制,使用类似方法的框架包括: chainer,dynet。作为对比,theano,tensorflow 采用静态自动求导机制。

1.3 神经网络的高层库(NN)
pytorch 还提供了高层的。对于常用的网络结构,如全连接、卷积、RNN 等。同时,pytorch 还提供了常用的、optimizer 及参数。

2. 自定义 Module

2.1 Function
Function 是 pytorch 自动求导机制的核心类。Function 是无参数或者说无状态的,它只负责接收输入,返回相应的输出;对于反向,它接收输出相应的梯度,返回输入相应的梯度。
2.2 Module
类似于 Function,Module 对象也是 callable ,输入和输出也是 Variable。不同的是,Module 是[可以]有参数的。Module 包含两个主要部分:参数及计算逻辑(Function 调用)。由于ReLU激活函数没有参数,这里我们以最基本的全连接层为例来说明如何自定义Module。

二.pytorch常用模块

名称作用
torch类似 NumPy 的张量库,强 GPU 支持 ;
torch.autograd基于 tape 的自动区别库,支持 torch 之中的所有可区分张量运行;
torch.nn为最大化灵活性未涉及、与 autograd 深度整合的神经网络库;
torch.optim与 torch.nn 一起使用的优化包,包含 SGD、RMSProp、LBFGS、Adam 等标准优化方式;
torch.multiprocessingpython 多进程并发,进程之间 torch Tensors 的内存共享;
torch.utils数据载入器。具有训练器和其他便利功能;
torch.legacy(.nn/.optim)处于向后兼容性考虑,从 Torch 移植来的 legacy 代码
torchvision独立于pytorch的关于图像操作的一些方便工具库

和数值相关的

Tensor
Variable
Parameter

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结构。

到此这篇关于pytorch框架的详细介绍与应用的文章就介绍到这了,更多相关pytorch框架介绍内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用Python实现web端用户登录和注册功能的教程

    用Python实现web端用户登录和注册功能的教程

    这篇文章主要介绍了用Python实现web端用户登录和注册功能的教程,需要的朋友可以参考下
    2015-04-04
  • Python-torch 之torch.clamp() 函数解析

    Python-torch 之torch.clamp() 函数解析

    torch.clamp()函数用于对输入张量进行截断操作,将张量中的每个元素限制在指定的范围内,这篇文章主要介绍了Python torch之torch.clamp()函数,需要的朋友可以参考下
    2023-05-05
  • Python实现检测SSL证书是否过期

    Python实现检测SSL证书是否过期

    我们知道 SSL 证书是会过期的,一旦过期之后需要重新申请,如果没有及时更换证书的话,就有可能导致网站出问题,所以本文介绍了如何利用Python实现检测SSL证书是否过期,需要的可以参考下
    2023-08-08
  • Python模拟登入的N种方式(建议收藏)

    Python模拟登入的N种方式(建议收藏)

    这篇文章主要介绍了Python模拟登入的N种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Python数据分析的八种处理缺失值方法详解

    Python数据分析的八种处理缺失值方法详解

    缺失值可能是数据科学中最不受欢迎的值,然而,它们总是在身边。忽略缺失值也是不合理的,因此我们需要找到有效且适当地处理它们的方法
    2021-11-11
  • 对pyqt5之menu和action的使用详解

    对pyqt5之menu和action的使用详解

    今天小编就为大家分享一篇对pyqt5之menu和action的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python matlab库简单用法讲解

    python matlab库简单用法讲解

    在本篇文章里小编给大家整理了一篇关于python matlab库简单用法讲解内容,有需要的朋友们可以学习下。
    2020-12-12
  • python opencv将图片转为灰度图的方法示例

    python opencv将图片转为灰度图的方法示例

    这篇文章主要介绍了python opencv将图片转为灰度图的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python3 导入上级目录中的模块实例

    Python3 导入上级目录中的模块实例

    今天小编就为大家分享一篇Python3 导入上级目录中的模块实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python+Appium自动化操作微信的教程分享

    Python+Appium自动化操作微信的教程分享

    Appium 是一个开源的自动化测试工具,支持 Android、iOS 平台上的原生应用,支持 Java、Python、PHP 等多种语言。本文主要介绍了Python+Appium自动化操作微信的教程,希望对大家有所帮助
    2023-01-01

最新评论