tensorflow求导和梯度计算实例
作者:大雄没有叮当猫 发布时间:2023-08-09 14:07:38
标签:tensorflow,求导,梯度计算
1. 函数求一阶导
import tensorflow as tf
tf.enable_eager_execution()
tfe=tf.contrib.eager
from math import pi
def f(x):
return tf.square(tf.sin(x))
assert f(pi/2).numpy()==1.0
sess=tf.Session()
grad_f=tfe.gradients_function(f)
print(grad_f(np.zeros(1))[0].numpy())
2. 高阶函数求导
import numpy as np
def f(x):
return tf.square(tf.sin(x))
def grad(f):
return lambda x:tfe.gradients_function(f)(x)[0]
x=tf.lin_space(-2*pi,2*pi,100)
# print(grad(f)(x).numpy())
x=x.numpy()
import matplotlib.pyplot as plt
plt.plot(x,f(x).numpy(),label="f")
plt.plot(x,grad(f)(x).numpy(),label="first derivative")#一阶导
plt.plot(x,grad(grad(f))(x).numpy(),label="second derivative")#二阶导
plt.plot(x,grad(grad(grad(f)))(x).numpy(),label="third derivative")#三阶导
plt.legend()
plt.show()
def f(x,y):
output=1
for i in range(int(y)):
output=tf.multiply(output,x)
return output
def g(x,y):
return tfe.gradients_function(f)(x,y)[0]
print(f(3.0,2).numpy()) #f(x)=x^2
print(g(3.0,2).numpy()) #f'(x)=2*x
print(f(4.0,3).numpy())#f(x)=x^3
print(g(4.0,3).numpy())#f(x)=3x^2
3. 函数求一阶偏导
x=tf.ones((2,2))
with tf.GradientTape(persistent=True) as t:
t.watch(x)
y=tf.reduce_sum(x)
z=tf.multiply(y,y)
dz_dy=t.gradient(z,y)
print(dz_dy.numpy())
dz_dx=t.gradient(z,x)
print(dz_dx.numpy())
for i in [0, 1]:
for j in [0, 1]:
print(dz_dx[i][j].numpy() )
4. 函数求二阶偏导
x=tf.constant(2.0)
with tf.GradientTape() as t:
with tf.GradientTape() as t2:
t2.watch(x)
y=x*x*x
dy_dx=t2.gradient(y,x)
d2y_dx2=t.gradient(dy_dx,x)
print(dy_dx.numpy())
print(d2y_dx2.numpy())
来源:https://blog.csdn.net/u013230189/article/details/81739520


猜你喜欢
- 前言:话说,我一直没能理解美工究竟是什么(这是一篇投稿)。因为要求确实很多。目前,我只能理解成,是前端开发+页面设计+用户体验设计的全能手。
- 概述:each() 方法规定为每个匹配元素规定运行的函数。返回 false 可用于及早停止循环,相当于break。返回 true 可以结束本
- 随着网络的迅速发展 发展 发展,二维码的应用将会越来越多。同时很多只是很平凡的二维码,请拿起你的手 把这个二维码 设计起来吧。下面分享了几个
- ...mapstate和...mapgetters的区别…mapstate当一个组件需要获取多个状态时候,将这些状态都
- 安装 pip install django-crontab在Django项目中使用settings.pyINSTALLED_AP
- 在seclists中看到一个很惊人的thread:http://seclists.org/oss-sec/2012/q2/493MySQL爆
- 数据库文件在使用过程中,日志文件会越来越大。小则几个G,大的可能几十上百G都有可能,有时实在是没有必要为它浪费太大的硬盘存储空间。所以可以把
- 本文实例讲述了Python实现矩阵加法和乘法的方法。分享给大家供大家参考,具体如下:本来以为python的矩阵用list表示出来应该很简单可
- <%'***********************************************'函数
- 本文实例为大家分享了javascript实现拼图游戏的具体代码,供大家参考,具体内容如下<div id="container
- 常见面试题Vue 如何监控数组defineProperty 真的不能监测数组变化吗?Vue 是如何追踪数据发生变化在 Vue 中当我们把一个
- 前言对Python游戏有所了解的朋友都知道,在2D的游戏制作中,经常会用到一个模块pygame,他能帮助我们实现很多方便使用的功能,例如绘制
- 前两篇文章对NumPy数组做了基本的介绍,本篇文章对NumPy数组进行较深入的探讨。首先介绍自定义类型的数组,接着数组的组合,最后介绍数组复
- pyautogui是一个可以控制鼠标和键盘的python库,类似的还有pywin32。pyautogui的安装pip3 install py
- Dreamweaver(以下简称DW)提供了一种称为“Behavior”(行为)的机制,帮助你构建页面
- <?phpfunction map($fun, $list,$params=array()){ $
- 本文实例讲述了django框架实现模板中获取request 的各种信息。分享给大家供大家参考,具体如下:在做网页程序时,request,re
- 1. join()join(’参数‘)把数组的元素以传入的参数为分割符,转换成字符串。let arr
- OVER的定义OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的
- 最近刚换工作不久,没太多的时间去整理工作中的东西,大部分时间都在用来熟悉新公司的业务,熟悉他们的代码框架了,最主要的是还有很多新东西要学,我