pytorch autograd计算标量函数二阶导数
计算标量函数: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计算标量函数二阶导数相关推荐
- c++ vector向量直接赋值_vector-Jacobian product 解释 ---- pytorch autograd
这篇文章将要解释pytorch autograd文档中的vector-Jacobian product. 文章由pytorch 官方文档中的这段话引出. 首先,雅各比矩阵J计算的是向量Y对于向量X的导 ...
- Pytorch Autograd (自动求导机制)
Introduce Pytorch Autograd库 (自动求导机制) 是训练神经网络时,反向误差传播(BP)算法的核心. 本文通过logistic回归模型来介绍Pytorch的自动求导机制.首先, ...
- PyTorch Autograd(backward grad 等PyTorch核心)
文章目录 绪论 1. PyTorch基础 2. 人工神经网络和反向传播 3. 动态计算图(dynamic computational graph) 4. 反向函数(Backward()) 5. 数学: ...
- 实操教程|PyTorch AutoGrad C++层实现
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨xxy-zhihu@知乎 来源丨https://zhuanla ...
- Pytorch autograd.grad与autograd.backward详解
Pytorch autograd.grad与autograd.backward详解 引言 平时在写 Pytorch 训练脚本时,都是下面这种无脑按步骤走: outputs = model(inputs ...
- PyTorch中torch.norm函数详解
torch.norm() 是 PyTorch 中的一个函数,用于计算输入张量沿指定维度的范数.具体而言,当给定一个输入张量 x 和一个整数 p 时,torch.norm(x, p) 将返回输入张量 x ...
- SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题
SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题 原文:SQL SERVER中用户定义标量函数(scalar user defined fu ...
- Pytorch 梯度计算,叶子节点,requires_grad,detach
Pytorch 梯度计算,叶子节点,requires_grad,detach 前言 梯度计算 叶子节点 张量requires_grad属性修改,detach 前言 本篇记录pytorch中梯度相关内容 ...
- MATLAB - 八个常用函数入门标量函数可视化
1.plot函数绘制二维曲线 plot函数常被用于绘制二维图形,具有很多种用法,此处介绍利用plot函数绘制二维点图和线图.基本格式为plot(x,y,LineSpec).此处LineSpec为线的规 ...
最新文章
- Nature综述:微生物构成的氮循环网络(收藏)
- 中科大分布式算法教案.pdf
- SQL 2008 外网访问说明
- 状态机-重叠序列检测
- html邮箱地址的正则表达式,javascript写一个校验邮箱的正则表达式
- Lindley equation
- Android设计模式之——迭代器模式
- putc函数_C语言中的putc()函数与示例
- MySQL 索引底层数据结构实现
- [翻译]在jQuery 1.5中使用deferred对象
- java线程池概念_Java 线程池概念、原理、简单实现
- 参观云栖小镇体会_云栖小镇感受
- Docker安装NextCloud使用MySQL
- R语言周氏检验(Chow test) 检验回归中结构不稳定性的虚拟变量的替代方案
- 开发者需要了解的nodejs中require的机制
- 【捡肥皂】,sql挂起清除工具 MS SQL2000挂起工具,无毒绿色,MSSQL手动清除挂起方法
- Qt信号与槽机制原理及优缺点
- 围成一圈的排列组合问题_排列组合问题模拟练习题
- win 10如何删除OEM分区
- 高考计算机会考等级划分标准,高中学业水平考试等级是怎么划分的