TensorFlow的自动求导原理分析


Posted in Python onMay 26, 2021

原理:

TensorFlow使用的求导方法称为自动微分(Automatic Differentiation),它既不是符号求导也不是数值求导,而类似于将两者结合的产物。

最基本的原理就是链式法则,关键思想是在基本操作(op)的水平上应用符号求导,并保持中间结果(grad)

基本操作的符号求导定义在\tensorflow\python\ops\math_grad.py文件中,这个文件中的所有函数都用RegisterGradient装饰器包装了起来,这些函数都接受两个参数op和grad,参数op是操作,第二个参数是grad是之前的梯度。

链式求导代码:

TensorFlow的自动求导原理分析

举个例子:

TensorFlow的自动求导原理分析

TensorFlow的自动求导原理分析

TensorFlow的自动求导原理分析

TensorFlow的自动求导原理分析

TensorFlow的自动求导原理分析

TensorFlow的自动求导原理分析

TensorFlow的自动求导原理分析

TensorFlow的自动求导原理分析

TensorFlow的自动求导原理分析

TensorFlow的自动求导原理分析

TensorFlow的自动求导原理分析

TensorFlow的自动求导原理分析

TensorFlow的自动求导原理分析

补充:聊聊Tensorflow自动求导机制

自动求导机制

在即时执行模式下,Tensorflow引入tf.GradientTape()这个“求导记录器”来实现自动求导。

计算函数y(x)=x^2在x = 3时的导数:

import tensorflow as tf
#定义变量
x = tf.Variable(initial_value = 3.)

#在tf.GradientTape()的上下文内,所有计算步骤都会被记录以用于求导
with tf.GradientTape() as tape:
    #y = x^2
    y = tf.square(x)
#计算y关于x的导数(斜率,梯度)
y_grad = tape.gradient(y,x)
print([y,y_grad])

输出:

[<tf.Tensor: shape=(), dtype=float32, numpy=9.0>, <tf.Tensor: shape=(), dtype=float32, numpy=6.0>]

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
使用Python编写简单网络爬虫抓取视频下载资源
Nov 04 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
Python队列的定义与使用方法示例
Jun 24 Python
python模块之paramiko实例代码
Jan 31 Python
对Python中内置异常层次结构详解
Oct 18 Python
python检测IP地址变化并触发事件
Dec 26 Python
Python with用法:自动关闭文件进程
Jul 10 Python
浅析python中while循环和for循环
Nov 19 Python
如何在python中执行另一个py文件
Apr 30 Python
django rest framework 过滤时间操作
Jul 12 Python
python通配符之glob模块的使用详解
Apr 24 Python
Django分页器的用法你都了解吗
May 26 #Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 #Python
python numpy中multiply与*及matul 的区别说明
May 26 #Python
python文本处理的方案(结巴分词并去除符号)
Django操作cookie的实现
May 26 #Python
pandas中DataFrame检测重复值的实现
python 中的@运算符使用
May 26 #Python
You might like
phpstrom使用xdebug配置方法
2013/12/17 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
jQuery实现图片加载完成后改变图片大小的方法
2016/03/29 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
如何搜索查找并解决Django相关的问题
2014/06/30 Python
跟老齐学Python之Import 模块
2014/10/13 Python
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
pandas重新生成索引的方法
2018/11/06 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
Python中new方法的详解
2019/01/15 Python
一个SQL面试题
2014/08/21 面试题
大学生的网上创业计划书
2013/12/31 职场文书
八年级语文教学反思
2014/02/11 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
个人自荐书怎么写
2015/03/26 职场文书
高考1977观后感
2015/06/04 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers