自动求导机制是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. Java Web项目部署

    打包 使用Eclipse打包JAVA Web项目 如下 在项目上单击右键选择Export-选择JavaEE文件夹-选择WAR file(MyEclipse),单击Next>如图所示,选择存放打包 ...

  2. MQ环境的搭建

    MQ环境的搭建

  3. August 10th 2017 Week 32nd Thursday

    Break through the psychological barrier to surpass themselves. 突破心理障碍,才能超越自己. To break through those ...

  4. Activator 通过SSH解锁屏幕等手势操作

    来源:https://qunwang6.github.io/blog/Activator/ Activator 发表于 2015-10-24   |   分类于 iOS Activator Activ ...

  5. Directed Graphs

    有向图 Introduction 就是边是有方向的,像单行道那样,也有很多典型的应用. 点的出度指从这个点发出的边的数目,入度是指向点的边数.当存在一条从点 v 到点 w 的路径时,称点 v 能够到达 ...

  6. CSS加载性能优化

    将首屏页面要用到的CSS文件,放在页面头部加载,其他模块的CSS可以使用异步加载:loadCSS 和 Preload. 关于preload,推进2篇文章给大家看下: 1.通过rel="pre ...

  7. 超慢速移动动画使用CSS3实现流畅效果

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVpbGVpZm9yZXZlcg==/font/5a6L5L2T/fontsize/400/fill/I0 ...

  8. 29、springboot与检索(1)

    一.检索 我们的应用经常需要添加检索功能,开源的 ElasticSearch 是目前全文搜索引擎的首选. 他可以快速的存储.搜索和分析海量数据.Spring Boot通过整合Spring Data E ...

  9. istringstream和ostringstream的实现

    ostringstream是将数据写入string里边的,istringstream是将从string里边读出数据的: #include <sstream> int main() { st ...

  10. Go并发与.Net TAP

    Go package main import "fmt" func sum(arrays []int, ch chan int) { fmt.Println(arrays) sum ...