首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用GradientTape TensorFlow计算二阶导数

用GradientTape TensorFlow计算二阶导数
EN

Stack Overflow用户
提问于 2020-11-29 09:20:47
回答 1查看 259关注 0票数 0

我正在尝试计算一个函数(3*x^2+y^2)关于两列矩阵排序的两个变量的二阶导数,由于某种原因,一阶导数是可以的,但二阶导数是完全错误的

代码语言:javascript
运行
AI代码解释
复制
import tensorflow as tf
import numpy as np
x = np.array([[-6.0,1.0,2.0,4.0,]])
y = np.array([[-3.0,8.0,9.0,12.0,]])
xy = tf.convert_to_tensor(np.concatenate([x.T,y.T],axis=1))
with tf.GradientTape() as tape2:
    tape2.watch(xy)
    with tf.GradientTape() as tape:
        tape.watch(xy)
        f = 3 * xy[:, 0] ** 2 * xy[:, 1] + xy[:, 1] ** 2
    df = tape.gradient(f, xy)
d2f = tape2.gradient(df, xy)

我得到的d2f是:

代码语言:javascript
运行
AI代码解释
复制
<tf.Tensor: shape=(4, 2), dtype=float64, numpy=
array([[-54., -34.],
       [ 54.,   8.],
       [ 66.,  14.],
       [ 96.,  26.]])>

这显然是错误的,因为关于y的二阶导数是常数2。

我在这里做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2020-11-29 19:37:55

我发现这样做的方法是:

代码语言:javascript
运行
AI代码解释
复制
with tf.GradientTape(persistent=True) as tape2:
    tape2.watch(xy)
    with tf.GradientTape() as tape:
        tape.watch(xy)
        f = 3 * xy[:, 0] ** 2 * xy[:, 1] + xy[:, 1] **2
    df = tape.gradient(f,xy)
    df_dx = df[:, 0]
    df_dy = df[:, 1]


d2f_dx2 = tape2.gradient(df_dx,xy)[:,0]
d2f_dy2 = tape2.gradient(df_dy,xy)[:,1]
del tape2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65058600

复制
相关文章
扩展之Tensorflow2.0 | 20 TF2的eager模式与求导
之前讲解了如何构建数据集,如何创建TFREC文件,如何构建模型,如何存储模型。这一篇文章主要讲解,TF2中提出的一个eager模式,这个模式大大简化了TF的复杂程度。
机器学习炼丹术
2020/10/15
1.9K0
扩展之Tensorflow2.0 | 20 TF2的eager模式与求导
TensorFlow2.X学习笔记(1)--TensorFlow核心概念
TensorFlow™ 是一个采用 数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。
MiChong
2020/09/24
9640
自动微分和梯度带
在上一个教程中,我们介绍了 "张量"(Tensor)及其操作。本教程涉及自动微分(automatic differentitation),它是优化机器学习模型的关键技巧之一。
狼啸风云
2020/01/14
7860
【tensorflow2.0】自动微分机制
神经网络通常依赖反向传播求梯度来更新网络参数,求梯度过程通常是一件非常复杂而容易出错的事情。
西西嘛呦
2020/08/26
6500
tf.GradientTape详解:梯度求解利器
tf.GradientTape定义在tensorflow/python/eager/backprop.py文件中,从文件路径也可以大概看出,GradientTape是eager模式下计算梯度用的,而eager模式(eager模式的具体介绍请参考文末链接)是TensorFlow 2.0的默认模式,因此tf.GradientTape是官方大力推荐的用法。下面就来具体介绍GradientTape的原理和使用。
用户7164815
2020/04/08
2.4K0
python实现之一阶二阶导数
f'(x)=(x^3)‘+(4cosx)‘-(sin(π/2))‘=3x^2-4sinx-0
python与大数据分析
2022/03/11
5890
python实现之一阶二阶导数
Tensorflow之基础篇
终于有点时间学一下之前碎碎念的TensorFlow,主要代码为主,内容来源于《简明的TensorFlow2》作者 李锡涵 李卓恒 朱金鹏,人民邮电出版社2020.9第1版。
Ed_Frey
2020/12/30
8460
Tensorflow之基础篇
用GPU进行TensorFlow计算加速
TensorFlow程序可以通过tf.device函数来指定运行每一个操作的设备,这个设备可以是本地的CPU或者GPU,也可以是某一台远程的服务器。但在本文中只关心本地的设备。TensorFlow会给每一个可用的设备一个名称,tf.device函数可以通过设备的名称来指定执行运算的设备。比如CPU在TensorFlow中的名称为/cpu:0。在默认情况下,即使机器有多个CPU,TensorFlow也不会区分它们,所有的CPU都使用/cpu:0作为名称。而一台机器上不同GPU的名称是不同的,第n个GPU在TensorFlow中的名称为/gpu:n。比如第一个GPU的名称为/gpu:0,第二个GPU名称为/gpu:1,以此类推。
博文视点Broadview
2020/06/11
2.1K0
深度学习的数学理论与代码实战
在《FNN(DNN)的前向传播和反向梯度推导》中,我们学习了FNN(DNN)的前向传播和反向梯度求导,但知识仍停留在纸面。本篇章将基于深度学习框架tensorflow验证我们所得结论的准确性,以便将抽象的数学符号和实际数据结合起来,将知识固化。更多相关内容请见《深度学习的数学理论与代码实战》系列介绍。
灯塔大数据
2020/12/30
4820
深度学习的数学理论与代码实战
OpenCV之图像梯度 – 拉普拉斯算子(二阶导数算子)
python代码: import cv2 as cv import numpy as np image = cv.imread("./test.png") cv.namedWindow("input", cv.WINDOW_AUTOSIZE) cv.imshow("input", image) h, w = image.shape[:2] src = cv.GaussianBlur(image, (0, 0), 1) dst = cv.Laplacian(src, cv.CV_32F, ksize=3,
MachineLP
2021/07/27
6970
tf.GradientTape
Record operations for automatic differentiation.
狼啸风云
2022/06/08
3960
Tensorflow学习——Eager Execution
TensorFlow 的 Eager Execution 是一种命令式编程环境,可立即评估操作,无需构建图:操作会返回具体的值,而不是构建以后再运行的计算图。这样能让您轻松地开始使用 TensorFlow 和调试模型,并且还减少了样板代码。要遵循本指南,请在交互式 python 解释器中运行下面的代码示例。
狼啸风云
2019/06/13
3K0
数据挖掘从入门到放弃(七):TensorFlow和keras实现线性回归LinearRegression
从实践出发学习TensorFlow和teras机器学习框架,分别用tf和keras实现线性模型,两者区别在于前者相当于手推了线性回归模型,后者使用单层的感知机,很便捷。相同内容更新在:https://blog.csdn.net/yezonggang
数据社
2020/05/29
9410
数据挖掘从入门到放弃(七):TensorFlow和keras实现线性回归LinearRegression
使用TensorFlow Probability实现最大似然估计
TensorFlow Probability是一个构建在TensorFlow之上的Python库。它将我们的概率模型与现代硬件(例如GPU)上的深度学习结合起来。
deephub
2023/02/01
7900
数值微分|多项式的导数计算
在数值积分推导辛普森公式时就是将函数插值成为多项式形式,原因在于多项式的简洁。任何初等函数都可以用泰勒公式展开成多项式的形式,然后在多项式的基础上作求导运算。也可以用别的插值方法,比如拉格朗日插值,样条插值,埃尔米特插值等等。
fem178
2020/08/13
1.4K0
数值微分|多项式的导数计算
偏导数与全导数
1.偏导数 代数意义 偏导数是对一个变量求导,另一个变量当做数 对x求偏导的话y就看作一个数,描述的是x方向上的变化率 对y求偏导的话x就看作一个数,描述的是y方向上的变化率 几何意义 对x求偏导是曲面z=f(x,y)在x方向上的切线 对y求偏导是曲面z=f(x,y)在x方向上的切线 这里在补充点.就是因为偏导数只能描述x方向或y方向上的变化情况,但是我们要了解各个方向上的情况,所以后面有方向导数的概念.
狼啸风云
2019/08/29
2.6K0
TensorFlow学习笔记:6、用Tensorflow计算a=(b+c)∗(c+2)
版权声明:本文为博主原创文章,欢迎转载。 https://blog.csdn.net/chengyuqiang/article/details/88796961
程裕强
2019/07/02
5720
梯度 方向导数 偏导数 导数 等值线
梯度出现在 高等数学下册 的 第九章:多元函数微分法及其应用  第七节: 方向导数与梯度中;(讲的非常清楚) 在讲到这个概念的时候,也是从二元函数开始入手,并没有讨论一元的情况,所以根据我的理解,梯度是一个出现在多元函数里面的概念,不存在一元的讨论里面; 同理,偏导数和方向导数只存在于多元函数的情况下,一元函数不会去讨论这些; 以下图来自以同济6版高数。 一、梯度 1)导数 对于一元函数而言,对某一点沿着唯一的一个自变量方向的变化率,就是导数。 2)偏导数 对于多元函数而言,对于某一点沿着每个自变量的方向
Echo_fy
2018/06/20
1.6K0
关于导数、偏导数的理解
导数是人工智能、神经网络的基础,正向传播、反向传播无不依赖于导数,导数也是高数的基础,本文算是一个半学习半理解加非科班的学习过程吧
python与大数据分析
2022/03/11
1.3K0
关于导数、偏导数的理解
点击加载更多

相似问题

用GradientTape()在TensorFlow2中计算偏导数的问题

10

在tensorflow中计算二阶导数时出错

16

Tensorflow中二阶导数的和

10

Tensorflow 2.0中的二阶导数

176

计算匿名函数的二阶导数

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档