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中处理字符串之endswith()方法的使用简介
May 18 Python
简单介绍Python中的几种数据类型
Jan 02 Python
Saltstack快速入门简单汇总
Mar 01 Python
举例讲解Python编程中对线程锁的使用
Jul 12 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
利用Python实现原创工具的Logo与Help
Dec 03 Python
Python 3.8新特征之asyncio REPL
May 28 Python
Python 装饰器原理、定义与用法详解
Dec 07 Python
在python中使用nohup命令说明
Apr 16 Python
keras 获取某层输出 获取复用层的多次输出实例
May 23 Python
Pandas对每个分组应用apply函数的实现
Dec 13 Python
如何理解及使用Python闭包
Jun 01 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
消息持续发送的完整例子
2006/10/09 PHP
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
修复ie8&amp;chrome下window的resize事件多次执行
2011/10/20 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
小程序实现分类页
2019/07/12 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
[00:26]TI7不朽珍藏III——冥界亚龙不朽展示
2017/07/15 DOTA
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
详解Python IO编程
2020/07/24 Python
python压包的概念及实例详解
2021/02/17 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
英国豪华文具和皮具配件经典老品牌:Smythson(斯迈森)
2018/04/19 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
高三自我鉴定怎么写
2013/10/19 职场文书
社区活动邀请函范文
2014/01/29 职场文书
预备党员转正考核材料
2014/06/03 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
商务信函英语问候语
2015/11/10 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL