(1)tf.AggregationMethod是一个类

Class AggregationMethod
类拥有的方法主要用于聚集梯度

计算偏导数需要聚集梯度贡献,这个类拥有在计算图中聚集梯度的很多方法。比如:

ADD_N: 所有的梯度被求和汇总,使用 "AddN"操作。有一个特点:所有的梯度在聚集之前必须要准备好,
DEFAULT: 默认聚集方法
类方法

ADD_N

DEFAULT

EXPERIMENTAL_ACCUMULATE_N

EXPERIMENTAL_TREE

TensorFlow拥有计算给定TensorFlow计算图的导数的函数。优化器类自动计算图上的导数,但是新的优化器的创建者或专家用户可以调用下面的底层函数。

(2)tf.gradients

tf.gradients(ys,xs,grad_ys=None,name='gradients',colocate_gradients_with_ops=False,gate_gradients=False,aggregation_method=None,stop_gradients=None
)

在XS中构造ys关于x的符号导数之和。

ys和xs是 每个tensor或tensor的列表。grad_ys是一个tensor列表,保存由ys接收的梯度,列表必须和ys长度一样。

gradients()将操作增加到图中,输出关于ys的导数,返回长度LeN(xs)的tensor的列表,其中每个tensor是ys中所有y的sum(Dy/Dx)。

grad_ys是一个张量(tensor)列表,其长度与ys的长度相同,它保持ys中的每个y的初始梯度。当grad_ys为None时,我们在ys中为每个y填充一个Y尺寸的’1’s的张量。用户可以提供他们自己的初始grad_ys来对每个y使用不同的初始梯度来计算导数(例如,如果希望为每个y中的每个值提供不同的加权梯度)。

(3)stop_gradients

是一个tensor或tensor的列表,所有关于xs作为常量(constant),这些tensor不会被反向传播,仿佛它们已经被使用stop_gradients 显式地断开。除此之外,这允许计算偏导数,而不是全导数。

在数学中,一个多变量的函数的偏导数,就是它关于其中一个变量的导数而保持其他变量恒定

f"xy与f"yx的区别在于:前者是先对 x 求偏导,然后将所得的偏导函数再对 y 求偏导;后者是先对 y 求偏导再对 x 求偏导。当 f"xy 与 f"yx 都连续时,求导的结果与先后次序无关。

已知二元函数z=f(u,v),其中u、v是关于x的一元函数,有u=u(x)、v=v(x),u、v作为中间变量构成自变量x的复合函数z,它最终是一个一元函数,它的导数就称为全导数。全导数的出现可以作为一类导数概念的补充,其中***着整合全部变量的思想。

求 z=x3+6xy+y5 偏导数。

解: = 3x + 6y, = 6x + 5y.

tf.stop_gradient
tf.hessians#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 27 11:16:32 2018@author: liuxing
"""import tensorflow as tf
a = tf.constant(1.)
b = tf.constant(1.)
c = tf.constant(1.)
g = tf.gradients([5*a + 3*b + 2*c], [a, b, c], stop_gradients=[a, b, c])sess=tf.Session()
with sess:print sess.run(g)
[5.0, 3.0, 2.0]

以上是使用stop_gradients计算偏导数,下面继续讨论stop_gradients

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 27 11:16:32 2018@author: liuxing
"""import tensorflow as tf
a = tf.constant(1.)
b = 2*a
c = 3*b
g = tf.gradients([a + b + c], [a, b, c], stop_gradients=[a, b, c])sess=tf.Session()
with sess:print sess.run(g)

[1.0, 1.0, 1.0]
偏导数都是1,这是正常的

g=a+b+c

对于a,b,c来说,偏导数g’a、g’b、g’c都是g=1

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 27 11:16:32 2018
@author: liuxing
"""import tensorflow as tf
x = tf.constant(1.)
a = 12*x
b = 2*a
c = 3*b
g1 = tf.gradients([a + b + c], [a, b, c])
g2 = tf.gradients([a + b + c], [a, b, c],stop_gradients=[a, b, c])sess=tf.Session()
with sess:print sess.run(g1)print sess.run(g2)

[9.0, 4.0, 1.0]
[1.0, 1.0, 1.0]
与全导数g1 = tf.gradients([a + b + c], [a, b, c])相比,偏导数g2 = tf.gradients([a + b + c], [a, b, c],stop_gradients=[a, b, c])
的值是[1.0,1.0 , 1.0],而全导数g1 = tf.gradients([a + b + c], [a, b, c])考虑了a对b和c的影响,并求值为[9.0, 4.0, 1.0],例如:

(a+b+c)'a=9,其中:

b=2*a

c=3b=32*a=6a

相比于在图构造期间使用的tf.stop_gradient。stop_gradients提供了已经构造完图之后停止梯度的方法,当将这两种方法结合起来时,反向传播在tf.stop_gradient节点和stop_gradients节点处都停止,无论首先遇到哪个节点。
所有整数张量被认为是恒定的,相对于所有的xs,就好像它们被包括在stop_gradients中。

参数说明:

ys: 将被求导的tensor列表或一个tensor
xs: 用于求导的tensor列表或一个tensor
grad_ys: 可选的,tensor或tensor列表与ys相同大小,并保持在ys中计算的每个y的梯度。
name: 用于将所有梯度OP分组在一起的可选名称。默认为“梯度”。
colocate_gradients_with_ops: 如果是True,尝试用用相应的op共同定位梯度。
gate_gradients: 如果为true,则为每个操作围绕梯度添加元组,这样可避免一些竞争条件。
aggregation_method: 指定用于组合梯度项的方法。接受值是类聚集方法中定义的常量。
类方法

ADD_N

DEFAULT

EXPERIMENTAL_ACCUMULATE_N

EXPERIMENTAL_TREE

stop_gradients: 可选。tensor和tensor列表不区分
tf.stop_gradient

tf.stop_gradient(input,name=None
)

停止梯度计算

当在图中计算时,这个操作原样输出它的输入tensor。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 27 11:16:32 2018
@author: liuxing
"""import tensorflow as tf
x = tf.constant(2.)
a = 12*x
b = 2*a
c = 3*x
g1 = tf.stop_gradient([a,b])
g2 = tf.gradients([a,c],[x])
g3 = tf.gradients([a,b,c],[x])
g4 = tf.gradients([a,b],a)
sess=tf.Session()
with sess:print sess.run(g1)print sess.run(g2)print sess.run(g3)print sess.run(g4)

[24. 48.]
[15.0]
[39.0]
[3.0]

当构建操作用于计算梯度时,这个操作避免考虑输入的贡献。通常来说,梯度生成器通过递归地找出有助于其计算的输入。 如果在图中插入这个OP,则从梯度发生器中屏蔽输入,它们不被考虑用于计算梯度。

每当您想用TensorFlow计算一个值,但需要假设值是常数时,这样是有用的。例如:

1.EM算法中的M-step不应该包括通过E_step(E步长)的输出的反向传播。

2.对比Boltzmann机器的发散训练,当对能量函数进行微分时,训练不能通过从模型中生成样本的图来进行反向传播。

3.敌对训练, 不应有逆反发生在对抗示例生成过程中。

参数:

input: tensor.
name: 操作名字(可选)
返回:

A Tensor. 和input尺寸一样

tensorflow随笔-底层梯度相关推荐

  1. Python深度学习企业实战之TensorFlow的底层原理及安装

    (一)TensorFlow 的底层原理 TensorFlow 是一个用于训练深度学习模型的强大开源软件库,由 Google Brain 小组推出. 基本原理是定义一个用来计算的图(可以简称为计算图), ...

  2. tensorflow中的梯度弥散与梯度爆炸

    定义:把梯度接近于0的现象称为梯度弥散:把梯度值远大于1的现象称为梯度爆炸. 例子1:梯度爆炸 import tensorflow as tf import numpy as np import ma ...

  3. tensorflow随笔-tf.while_loop

    tf.while_loop( cond, body, loop_vars, shape_invariants=None, parallel_iterations=10, back_prop=True, ...

  4. tensorflow随笔-线性拟合以及tensorboard

    运行程序,并查看生成的汇总信息 [root@VM_0_3_centos learn]# python36 learn1.py 2018-12-19 09:22:26.676337: I tensorf ...

  5. tensorflow随笔-滑动平均模型

    随机梯度下降算法训练时,使用滑动平均模型 可以提高模型健壮性. 在Tensorflow中提供了tf.train.ExponentialMovingAverage来实现滑动平均模型.在初始化Expone ...

  6. 一文简单弄懂tensorflow_在tensorflow中设置梯度衰减

    我是从keras入门深度学习的,第一个用的demo是keras实现的yolov3,代码很好懂(其实也不是很好懂,第一次也搞了很久才弄懂) 然后是做的车牌识别,用了tiny-yolo来检测车牌位置,当时 ...

  7. tensorflow随笔——VGG网络

    这次用slim搭个稍微大一点的网络VGG16,VGG16和VGG19实际上差不多,所以本例程的代码以VGG16来做5类花的分类任务. VGG网络相比之前的LeNet,AlexNet引入如下几个特点: ...

  8. tensorflow随笔-队列管理器QueueRunner-生产者与消费者

    # -*- coding: utf-8 -*- """ Spyder EditorThis is a temporary script file. "" ...

  9. tensorflow随笔-随机数

    Aliases: tf.compat.v1.random.normal tf.compat.v1.random_normal tf.compat.v2.random.normal tf.random_ ...

最新文章

  1. public static final int REMIN_REQUEST_CODE = 0x911 自己的大致理解
  2. php获取地址栏id,如何解决php urldecode乱码问题
  3. str_pad函数php,str_pad
  4. MATLAB 查看程序执行内存最大使用值
  5. 解决MySQL数据库作古掉以及谢绝任事的办法
  6. 自带flash的浏览器_小技巧:三步还你一个干净清爽无广告的360浏览器
  7. 2.3.6 Federate 远程访问数据库
  8. e几个灯同时亮灭两次verilog_FPGA题及答案
  9. Activity的启动流程
  10. github果然强大
  11. 奇怪的象棋游戏及升级版
  12. Flash AS3.0中文帮助下载
  13. linux启用dcb步骤,Linux DCB体系——简短概述
  14. 《Spring Boot极简教程》 第6章 Springboot数据库集成
  15. UML核心元素--参与者
  16. CSS Transition
  17. 顶级科学家是哲学家,顶级investor是哲学家
  18. linux xdp简介
  19. STM32 USB基础知识
  20. 【H.264/AVC视频编解码技术详解】四. 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码

热门文章

  1. maven学习6 Eclipse下Tomcat常用设置
  2. 百度地图API开发指南
  3. SpringMVC源码阅读系列汇总
  4. 一个还不错的源码解析网站
  5. Android调用蓝牙打印机
  6. CUDA入门需要知道的东西
  7. [漫画]~RAGNAROK~(I部II部.全收入)
  8. 12本接收率高的医学SCI期刊
  9. Atlas Of Cardiovascular Emergencies 心血管急症图集
  10. 转载:【opencv入门教程之三】:图片的载入|显示|输出