Pytorch中的自动求梯度机制和Variable类实例

 更新时间:2020年02月29日 11:07:41   作者:思念殇千寻  
今天小编就为大家分享一篇Pytorch中的自动求梯度机制和Variable类实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

自动求导机制是每一个深度学习框架中重要的性质,免去了手动计算导数,下面用代码介绍并举例说明Pytorch的自动求导机制。

首先介绍Variable,Variable是对Tensor的一个封装,操作和Tensor是一样的,但是每个Variable都有三个属性:Varibale的Tensor本身的.data,对应Tensor的梯度.grad,以及这个Variable是通过什么方式得到的.grad_fn,根据最新消息,在pytorch0.4更新后,torch和torch.autograd.Variable现在是同一类。torch.Tensor能像Variable那样追踪历史和反向传播。Variable仍能正确工作,但是返回的是Tensor。

我们拥抱这些新特性,看看Pytorch怎么进行自动求梯度。

#encoding:utf-8
import torch

x = torch.tensor([2.],requires_grad=True) #新建一个tensor,允许自动求梯度,这一项默认是false.
y = (x+2)**2 + 3 #y的表达式中包含x,因此y能进行自动求梯度
y.backward()
print(x.grad)

输出结果是:

tensor([8.])

这里添加一个小知识点,即torch.Tensor和torch.tensor的不同。二者均可以生成新的张量,但torch.Tensor()是python类,是默认张量类型torch.FloatTensor()的别名,使用torch.Tensor()会调用构造函数,生成单精度浮点类型的张量。

而torch.tensor()是函数,其中data可以是list,tuple,numpy,ndarray,scalar和其他类型,但只有浮点类型的张量能够自动求梯度。

torch.tensor(data, dtype=None, device=None, requires_grad=False)

言归正传,上一个例子的变量本质上是标量。下面一个例子对矩阵求导。

#encoding:utf-8
import torch

x = torch.ones((2,4),requires_grad=True)
y = torch.ones((2,1),requires_grad=True)
W = torch.ones((4,1),requires_grad=True)

J = torch.sum(y - torch.matmul(x,W)) #torch.matmul()表示对矩阵作乘法
J.backward()
print(x.grad)
print(y.grad)
print(W.grad)

输出结果是:

tensor([[-1., -1., -1., -1.],
   [-1., -1., -1., -1.]])
tensor([[1.],
   [1.]])
tensor([[-2.],
   [-2.],
   [-2.],
   [-2.]])  

以上这篇Pytorch中的自动求梯度机制和Variable类实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python使用whisper实现语音识别(ASR)的示例代码

    Python使用whisper实现语音识别(ASR)的示例代码

    Whisper是OpenAI的一个强大的语音识别库,支持离线的语音识别,本文主要介绍了Python使用whisper实现语音识别(ASR)的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Python中的延迟绑定原理详解

    Python中的延迟绑定原理详解

    这篇文章主要介绍了Python中的延迟绑定原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Django+Bootstrap实现计算器的示例代码

    Django+Bootstrap实现计算器的示例代码

    本文主要介绍了Django+Bootstrap实现计算器的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 简单了解python 邮件模块的使用方法

    简单了解python 邮件模块的使用方法

    这篇文章主要介绍了简单了解python 邮件模块的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Pycharm配置anaconda环境图文教程

    Pycharm配置anaconda环境图文教程

    这篇文章主要介绍了Pycharm配置anaconda环境图文教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Python3利用Dlib19.7实现摄像头人脸识别的方法

    Python3利用Dlib19.7实现摄像头人脸识别的方法

    这篇文章主要介绍了Python 3 利用 Dlib 19.7 实现摄像头人脸识别 ,利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • numpy中np.append()函数用法小结

    numpy中np.append()函数用法小结

    在numpy的函数库中,np.append()函数是一个常用的数组操作函数,它在进行数组操作时能够将两个数组进行拼接,并返回一个拼接后的新数组,下面就来介绍一下具体用法,感兴趣的可以了解一下
    2023-11-11
  • Python中读取和加解密PDF文件的详细教程

    Python中读取和加解密PDF文件的详细教程

    在Python中读取和加密PDF文件是一项常见且实用的任务,尤其对于需要处理大量文档自动化处理的场景,本文将详细介绍如何使用Python读取PDF文件内容以及如何使用不同的库来给PDF文件加密,需要的朋友可以参考下
    2024-08-08
  • 手把手教你如何安装Pycharm(详细图文教程)

    手把手教你如何安装Pycharm(详细图文教程)

    这篇文章主要介绍了手把手教你如何安装Pycharm(详细图文教程),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 浅谈Python爬虫基本套路

    浅谈Python爬虫基本套路

    这篇文章主要介绍了Python爬虫基本套路,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论