TensorFlow tf.gradients的用法详细解析以及具体例子
tf.gradients
官方定义:
tf.gradients(
ys,
xs,
grad_ys=None,
name='gradients',
stop_gradients=None,
)
Constructs symbolic derivatives of sum of ys
w.r.t. x in xs
.
ys
and xs
are each a Tensor
or a list of tensors. grad_ys
is a list of Tensor
, holding the gradients received by theys
. The list must be the same length as ys
.
gradients()
adds ops to the graph to output the derivatives of ys
with respect to xs
. It returns a list of Tensor
of length len(xs)
where each tensor is the sum(dy/dx)
for y in ys
.
grad_ys
is a list of tensors of the same length as ys
that holds the initial gradients for each y in ys
. When grad_ys
is None, we fill in a tensor of '1's of the shape of y for each y in ys
. A user can provide their own initial grad_ys
to compute the derivatives using a different initial gradient for each y (e.g., if one wanted to weight the gradient differently for each value in each y).
stop_gradients
is a Tensor
or a list of tensors to be considered constant with respect to all xs
. These tensors will not be backpropagated through, as though they had been explicitly disconnected using stop_gradient
. Among other things, this allows computation of partial derivatives as opposed to total derivatives.
翻译:
1. xs和ys可以是一个张量,也可以是张量列表,tf.gradients(ys,xs) 实现的功能是求ys(如果ys是列表,那就是ys中所有元素之和)关于xs的导数(如果xs是列表,那就是xs中每一个元素分别求导),返回值是一个与xs长度相同的列表。
例如ys=[y1,y2,y3], xs=[x1,x2,x3,x4],那么tf.gradients(ys,xs)=[d(y1+y2+y3)/dx1,d(y1+y2+y3)/dx2,d(y1+y2+y3)/dx3,d(y1+y2+y3)/dx4].具体例子见下面代码第16-17行。
2. grad_ys 是ys的加权向量列表,和ys长度相同,当grad_ys=[q1,q2,g3]时,tf.gradients(ys,xs,grad_ys)=[d(g1*y1+g2*y2+g3*y3)/dx1,d(g1*y1+g2*y2+g3*y3)/dx2,d(g1*y1+g2*y2+g3*y3)/dx3,d(g1*y1+g2*y2+g3*y3)/dx4].具体例子见下面代码第19-21行。
3. stop_gradients使得指定变量不被求导,即视为常量,具体的例子见官方例子,此处省略。
import tensorflow as tf
w1 = tf.Variable([[1,2]])
w2 = tf.Variable([[3,4]])
res = tf.matmul(w1, [[2],[1]]) #ys必须与xs有关,否则会报错
# grads = tf.gradients(res,[w1,w2])
#TypeError: Fetch argument None has invalid type <class 'NoneType'> # grads = tf.gradients(res,[w1])
# # Result [array([[2, 1]])] res2a=tf.matmul(w1, [[2],[1]])+tf.matmul(w2, [[3],[5]])
res2b=tf.matmul(w1, [[2],[4]])+tf.matmul(w2, [[8],[6]]) # grads = tf.gradients([res2a,res2b],[w1,w2])
#result:[array([[4, 5]]), array([[11, 11]])] grad_ys=[tf.Variable([[1]]),tf.Variable([[2]])]
grads = tf.gradients([res2a,res2b],[w1,w2],grad_ys=grad_ys)
# Result: [array([[6, 9]]), array([[19, 17]])] with tf.Session() as sess:
tf.global_variables_initializer().run()
re = sess.run(grads)
print(re)
TensorFlow tf.gradients的用法详细解析以及具体例子的更多相关文章
- jquery.cookie用法详细解析,封装的操作cookie的库有jquery.cookie.js
jquery.cookie用法详细解析 需要注意存入cookie前,对数据进行序列化, 得到后在反序列化: 熟练运用:JSON.stringify();和JSON.parse(): 通常分为如下几个步 ...
- jquery.cookie用法详细解析
本篇文章主要是对jquery.cookie的用法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将 ...
- JQUERY dialog的用法详细解析
本篇文章主要是对JQUERY中dialog的用法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 今天用到了客户端的对话框,把 jQuery UI 中的对话框学习了一下. 准备 jQ ...
- c++中new的三种用法详细解析
转载至: http://www.jb51.net/article/41524.htm 以下的是对c++中new的三种使用方法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助. 一. ...
- PHP引用符&的用法详细解析
本文转自:http://blog.csdn.net/vip_linux/article/details/10206091PHP中引用符&的用法.关于php的引用(就是在变量或者函数.对象等前面 ...
- linux mount命令的用法详细解析
挂接命令(mount)首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的.命令格式:mount [-t vfstype] [-o options] ...
- jquery.cookie实战用法详细解析
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是 ...
- 2:jquery.cookie用法详细解析
一个轻量级的cookie 插件,可以读取.写入.删除 cookie. jquery.cookie.js 的配置 首先包含jQuery的库文件,在后面包含 jquery.cookie.js 的库文件. ...
- Pytorch中torch.autograd ---backward函数的使用方法详细解析,具体例子分析
backward函数 官方定义: torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph ...
随机推荐
- [原创]..\OBJ\gpio.axf: error: L6002U: Could not open file ..\obj\gpio.o: No such file
可以通过: 可以通过修改用户环境变量路径的方法解决:方法:右键我的电脑\属性\高级系统设置\环境变量\用户环境变量,找到变量TEMP和TMP,将变量值中的“%USERPROFILE%”使用“C:\us ...
- [FJWC2018]全排列
题解: 考虑长度为k的时候的贡献 即取出一些元素然后给他们排个顺序然后问你有多少排法 假设排法为ans 那么应该就是$C(n,k)*C(n,k)*(n-k)!*(n-k)!*(n-k+1)*ans$ ...
- day20.序列化模块
参考云游道士:https://www.cnblogs.com/yyds/p/6563608.html 1.什么是序列化 序列化就是将字典,数字等数据类型转换为字符串数据类型 所说的序列就是字符串 2. ...
- RabbitMQ原理图
一.RabbitMQ 原理图 二.Rabbit 交换器讲解 1 Direct 交换器(发布与订阅 完全匹配) 1.2搭建环境 1 ...
- Mysql之SQL经验基础积累
1.根据create_time排序,如何确保null值的排在最前面: 解决办法: ,), a.create_time DESC 结果如下图:
- 南京邮电大学//bugkuCTF部分writeup
WEB 1.签到题 nctf{flag_admiaanaaaaaaaaaaa} 右键查看源代码或按f12即可. 2.这题不是web nctf{photo_can_also_hid3_msg} 下载图片 ...
- Hive的DDL操作
DDL:data definittion language 数据定义语言 主要是定义或改变表的结构.数据类型.表之间的链接和约束等初始化操作 DML:data manipulation languag ...
- ArcGIS Server学习之问题:ArcGIS Server10.5发布地图显示空白
一.安装ArcGIS10.5 参考ArcGIS 10.5 for Desktop 完整安装教程(含win7/8/10 32/64位+下载地址+亲测可用) | 麻辣GIS 二.安装ArcGIS Serv ...
- Mybatis源码分析(原创)
@test 1.进入SqlSessionFactoryBuilder中build方法 2.进入XMLConfigBuilder类中parse->parseConfiguration中 通过该方 ...
- 动态规划——Best Time to Buy and Sell Stock IV
这是这个系列题目的第四个,题目大意和之前的差不多,但是这次提供最多k次的操作,操作还是不能同时操作即必须结束前一个操作才能进行后一个操作. 状态比较好理解,就是题目要求的缩小版,dp[k][i]表示进 ...