计算标量函数:y=x3+sin(x)y=x^3+sin(x)y=x3+sin(x)
在x=1,π,5x=1,\pi,5x=1,π,5时的一阶导dydx\frac{dy}{dx}dxdy​和二阶导d2ydx2\frac{d^2y}{dx^2}dx2d2y​,程序代码如下:

# -*- coding: utf-8 -*-
"""
Created on Mon Sep 28 08:59:50 2020@author: 周文青利用torch.autograd计算单变量标量函数y=x^3+sin(x)在x分别为1,pi和5时的一阶导数和二
阶导数"""
import torch as tc
import numpy as np#%% 方法1:采用torch.autograd.grad
x  = tc.tensor([1, np.pi, 5],requires_grad=True)
y = x**3 +  tc.sin(x)
dy = 3*x**2 + tc.cos(x)
d2y = 6*x - tc.sin(x)dydx = tc.autograd.grad(y, x, grad_outputs=tc.ones(x.shape), #注意这里需要人为指定create_graph=True, retain_graph=True) # 为计算二阶导保持计算图
print(dydx) # 注意输出是一个tuple,取第一个元素
# (tensor([ 3.5403, 28.6088, 75.2837], grad_fn=<AddBackward0>),)
print(dy)
# tensor([ 3.5403, 28.6088, 75.2837], grad_fn=<AddBackward0>)d2ydx2 = tc.autograd.grad(dydx[0],x, grad_outputs=tc.ones(x.shape), create_graph=False) # 默认会自动销毁计算图
print(d2ydx2)
# (tensor([ 5.1585, 18.8496, 30.9589]),)
print(d2y)
# tensor([ 5.1585, 18.8496, 30.9589], grad_fn=<SubBackward0>)#%% 方法2:采用torch.autograd.backword
x  = tc.tensor([1, np.pi, 5],requires_grad=True)
y = x**3 +  tc.sin(x)
dy = 3*x**2 + tc.cos(x)
d2y = 6*x - tc.sin(x)tc.autograd.backward(y, grad_tensors=tc.ones(x.shape),create_graph=True, retain_graph=False)
print(x.grad) #一阶导
# tensor([ 3.5403, 28.6088, 75.2837], grad_fn=<CopyBackwards>)
tc.autograd.backward(x.grad, grad_tensors=tc.ones(x.shape),create_graph=False, retain_graph=False)#采用backword的方法并且在求一阶导的时候设置了create_graph时,该结果是两次梯度的累加结果
print(x.grad)
# tensor([  8.6988,  47.4584, 106.2426], grad_fn=<CopyBackwards>)

pytorch实现了自动微分功能,可以自动计算梯度,因此后续可以研究使用pytorch实现一些利用梯度信息的优化算法,包括单变量情况和多变量情况的,例如one line search中的牛顿法梯度下降法共轭梯度算法等。

pytorch autograd计算标量函数二阶导数相关推荐

  1. c++ vector向量直接赋值_vector-Jacobian product 解释 ---- pytorch autograd

    这篇文章将要解释pytorch autograd文档中的vector-Jacobian product. 文章由pytorch 官方文档中的这段话引出. 首先,雅各比矩阵J计算的是向量Y对于向量X的导 ...

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

    Introduce Pytorch Autograd库 (自动求导机制) 是训练神经网络时,反向误差传播(BP)算法的核心. 本文通过logistic回归模型来介绍Pytorch的自动求导机制.首先, ...

  3. PyTorch Autograd(backward grad 等PyTorch核心)

    文章目录 绪论 1. PyTorch基础 2. 人工神经网络和反向传播 3. 动态计算图(dynamic computational graph) 4. 反向函数(Backward()) 5. 数学: ...

  4. 实操教程|PyTorch AutoGrad C++层实现

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨xxy-zhihu@知乎 来源丨https://zhuanla ...

  5. Pytorch autograd.grad与autograd.backward详解

    Pytorch autograd.grad与autograd.backward详解 引言 平时在写 Pytorch 训练脚本时,都是下面这种无脑按步骤走: outputs = model(inputs ...

  6. PyTorch中torch.norm函数详解

    torch.norm() 是 PyTorch 中的一个函数,用于计算输入张量沿指定维度的范数.具体而言,当给定一个输入张量 x 和一个整数 p 时,torch.norm(x, p) 将返回输入张量 x ...

  7. SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题

    SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题 原文:SQL SERVER中用户定义标量函数(scalar user defined fu ...

  8. Pytorch 梯度计算,叶子节点,requires_grad,detach

    Pytorch 梯度计算,叶子节点,requires_grad,detach 前言 梯度计算 叶子节点 张量requires_grad属性修改,detach 前言 本篇记录pytorch中梯度相关内容 ...

  9. MATLAB - 八个常用函数入门标量函数可视化

    1.plot函数绘制二维曲线 plot函数常被用于绘制二维图形,具有很多种用法,此处介绍利用plot函数绘制二维点图和线图.基本格式为plot(x,y,LineSpec).此处LineSpec为线的规 ...

最新文章

  1. Nature综述:微生物构成的氮循环网络(收藏)
  2. 中科大分布式算法教案.pdf
  3. SQL 2008 外网访问说明
  4. 状态机-重叠序列检测
  5. html邮箱地址的正则表达式,javascript写一个校验邮箱的正则表达式
  6. Lindley equation
  7. Android设计模式之——迭代器模式
  8. putc函数_C语言中的putc()函数与示例
  9. MySQL 索引底层数据结构实现
  10. [翻译]在jQuery 1.5中使用deferred对象
  11. java线程池概念_Java 线程池概念、原理、简单实现
  12. 参观云栖小镇体会_云栖小镇感受
  13. Docker安装NextCloud使用MySQL
  14. R语言周氏检验(Chow test) 检验回归中结构不稳定性的虚拟变量的替代方案
  15. 开发者需要了解的nodejs中require的机制
  16. 【捡肥皂】,sql挂起清除工具 MS SQL2000挂起工具,无毒绿色,MSSQL手动清除挂起方法
  17. Qt信号与槽机制原理及优缺点
  18. 围成一圈的排列组合问题_排列组合问题模拟练习题
  19. win 10如何删除OEM分区
  20. 高考计算机会考等级划分标准,高中学业水平考试等级是怎么划分的

热门文章

  1. 算法题中关于去重问题的解法(不同的值)
  2. [转]经典人事面面试题
  3. 如何快速阅读英文论文
  4. 树莓派搭WEB控制点灯(微信点灯,网页控制电机等)
  5. matlab里面求线性方程组,利用matlab求线性方程组.doc
  6. 一枚程序猿的MacBook M1使用体验
  7. CAD在线转换怎么操作?分享个快速解决的方法
  8. ByShell 一个穿越主动防御的木马
  9. 笔记本直连服务器ip怎么设置,双机直连详细设置(两台电脑直接连接)
  10. 人类基因组在三大基因数据库中的不同版本