自动求导机制是pytorch中非常重要的性质,免去了手动计算导数,为构建模型节省了时间。下面介绍自动求导机制的基本用法。

#自动求导机制

import torch

from torch.autograd import Variable

# 1、简单的求导(求导对象是标量)

x = Variable(torch.Tensor([2]),requires_grad=True)

y = (x + 2) ** 2 + 3

print(y)

y.backward()

print(x.grad)

#对矩阵求导

x1 = Variable(torch.randn(10,20),requires_grad=True)

y1 = Variable(torch.randn(10,1),requires_grad=True)

W = Variable(torch.randn(20,1),requires_grad=True)

J = torch.mean(y1 - torch.matmul(x1,W)) #matmul表示做矩阵乘法

J.backward()

print(x1.grad)

print(y1.grad)

print(W.grad)

tensor([19.], grad_fn=<AddBackward0>)
tensor([8.])
tensor([[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454],
[-0.1636, 0.0904, 0.0446, -0.1052, -0.2323, 0.0129, -0.1532, 0.0544,
0.0231, -0.0993, -0.0387, -0.1762, 0.0477, 0.1552, 0.0493, 0.0144,
-0.1581, 0.1986, -0.0226, -0.0454]])
tensor([[0.1000],
[0.1000],
[0.1000],
[0.1000],
[0.1000],
[0.1000],
[0.1000],
[0.1000],
[0.1000],
[0.1000]])
tensor([[ 0.0224],
[ 0.0187],
[-0.2078],
[ 0.5092],
[ 0.0677],
[ 0.3497],
[-0.4575],
[-0.5480],
[ 0.4228],
[-0.0869],
[ 0.2876],
[-0.1714],
[ 0.0985],
[-0.1364],
[-0.1502],
[-0.1372],
[-0.0999],
[-0.0006],
[-0.0544],
[-0.0678]])

#复杂情况的自动求导 多维数组自动求导机制

import torch

from torch.autograd import Variable

x = Variable(torch.FloatTensor([3]),requires_grad=True)

y = x ** 2 + x * 2 + 3

y.backward(retain_graph=True) #保留计算图

print(x.grad)

y.backward()#不保留计算图

print(x.grad) #得到的是第一次求导的值加上第二次求导的值 8 + 8

tensor([8.])
tensor([16.])

#小练习,向量对向量求导

import torch

from torch.autograd import Variable

x = Variable(torch.Tensor([2,3]),requires_grad = True)

k = Variable(torch.zeros_like(x))

k[0] = x[0]**2 + 3 * x[1]

k[1] = 2*x[0] + x[1] ** 2

print(k)

j = torch.zeros(2,2)

k.backward(torch.FloatTensor([1,0]),retain_graph = True)

j[0] = x.grad.data

x.grad.zero_()

k.backward(torch.FloatTensor([0,1]),retain_graph = True)

j[1] = x.grad.data

print(j)

tensor([13., 13.], grad_fn=<CopySlices>)
tensor([[4., 3.],
[2., 6.]])

Pytorch之Variable求导机制的更多相关文章

  1. Pytorch Autograd (自动求导机制)

    Pytorch Autograd (自动求导机制) Introduce Pytorch Autograd库 (自动求导机制) 是训练神经网络时,反向误差传播(BP)算法的核心. 本文通过logisti ...

  2. pytorch的自动求导机制 - 计算图的建立

    一.计算图简介 在pytorch的官网上,可以看到一个简单的计算图示意图, 如下. import torchfrom torch.autograd import Variable x = Variab ...

  3. PyTorch官方中文文档:自动求导机制

    自动求导机制 本说明将概述Autograd如何工作并记录操作.了解这些并不是绝对必要的,但我们建议您熟悉它,因为它将帮助您编写更高效,更简洁的程序,并可帮助您进行调试. 从后向中排除子图 每个变量都有 ...

  4. Pytorch学习(一)—— 自动求导机制

    现在对 CNN 有了一定的了解,同时在 GitHub 上找了几个 examples 来学习,对网络的搭建有了笼统地认识,但是发现有好多基础 pytorch 的知识需要补习,所以慢慢从官网 API进行学 ...

  5. Pytorch中的自动求梯度机制和Variable类

    自动求导机制是每一个深度学习框架中重要的性质,免去了手动计算导数,下面用代码介绍并举例说明Pytorch的自动求导机制. 首先介绍Variable,Variable是对Tensor的一个封装,操作和T ...

  6. 『PyTorch x TensorFlow』第六弹_从最小二乘法看自动求导

    TensoFlow自动求导机制 『TensorFlow』第二弹_线性拟合&神经网络拟合_恰是故人归 下面做了三个简单尝试, 利用包含gradients.assign等tf函数直接构建图进行自动 ...

  7. Pytorch Tensor, Variable, 自动求导

    2018.4.25,Facebook 推出了 PyTorch 0.4.0 版本,在该版本及之后的版本中,torch.autograd.Variable 和 torch.Tensor 同属一类.更确切地 ...

  8. 【小白学PyTorch】20 TF2的eager模式与求导

    [新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.时间序列等多个目标为技术学习的分群和水群唠嗑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx64501661 ...

  9. 什么是pytorch(2Autograd:自动求导)(翻译)

    Autograd: 自动求导 pyTorch里神经网络能够训练就是靠autograd包.我们来看下这个包,然后我们使用它来训练我们的第一个神经网络. autograd 包提供了对张量的所有运算自动求导 ...

随机推荐

  1. Linux 硬件RAID详解系统功能图

    RAID-0(条带模式) 特点: 在读写的时候可以实现并发,所以相对其读写性能最好,每个磁盘都保存了完整数据的一部分,读取也采用并行方式,磁盘数量越多,读取和写入速度越快. 因为没有冗余,一个硬盘坏掉 ...

  2. ASP.NET Core 编码、web编码、网页编码 System.Text.Encodings.Web

    System.Text.Encodings.Web 空间包含表示 Web 编码器的基类.表示 HTML.JavaScript 和 Url 字符编码的子类,以及表示仅允许编码特定字符.字符范围或码位的筛 ...

  3. August 24th 2017 Week 34th Thursday

    If you have choices, choose the best. If you have no choice, do the best. 如果有选择,那就选择最好的:如果没有选择,那就努力做 ...

  4. Shortest Paths

    最短路径 APIs 带权有向图中的最短路径,这节讨论从源点(s)到图中其它点的最短路径(single source). Weighted Directed Edge API 需要新的数据类型来表示带权 ...

  5. Alpha Scrum5

    Alpha Scrum5 牛肉面不要牛肉不要面 Alpha项目冲刺(团队作业5) 各个成员在 Alpha 阶段认领的任务 林志松:督促和监督团队进度,前端页面编写 林书浩.陈远军:界面设计.美化 吴沂 ...

  6. 查看SQL运行时间

    set @d=now(); select * from table; select timestampdiff(second,@d,now());

  7. JavaScript正则表达式_常用的正则

     一.检查邮政编码 var pattern = /[1-9][0-9]{5}/; //共 6 位数字,第一位不能为0 {5}表示后面5位0到9 var str = '224000'; alert(pa ...

  8. python中的BaseManager通信(二)文件二分

    提供服务部分(运行时在接收端未打开前不能关闭) #mainsec.py from multiprocessing import Process, Queue from multiprocessing. ...

  9. 使用tidylib解决不规则网页问题

    windows 下安装tidylib 先去https://pypi.python.org/pypi/pytidylib 下载pytidylib 跑官方提供的测试用例报错 ition 0: unexpe ...

  10. POJ2318 TOYS

    嘟嘟嘟 题面:先告诉你一个矩形抽屉的坐标,然后\(n\)个隔板将抽屉分成了\(n + 1\)格(格子从\(0\)到\(n - 1\)标号),接下来随机输入\(m\)个玩具的坐标.问最后每一个格子里有多 ...