tensorflow-底层梯度tf.AggregationMethod,tf.gradients

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tensorflow-底层梯度tf.AggregationMethod,tf.gradients相关的知识,希望对你有一定的参考价值。

(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=x^3+6xy+y^5?偏导数。

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

tf.stop_gradient
tf.hessians

以上是关于tensorflow-底层梯度tf.AggregationMethod,tf.gradients的主要内容,如果未能解决你的问题,请参考以下文章

用TensorFlow来实现梯度下降

用TensorFlow来实现梯度下降

TensorFlow2 手把手教你避开梯度消失和梯度爆炸

TensorFlow的梯度裁剪

如何在 Tensorflow 中实现反转梯度?

tensorflow 梯度裁剪