构造 ys
w.r.t 之和的符号导数。 x 在 xs
。
用法
tf.compat.v1.gradients(
ys, xs, grad_ys=None, name='gradients',
colocate_gradients_with_ops=False, gate_gradients=False,
aggregation_method=None, stop_gradients=None,
unconnected_gradients=tf.UnconnectedGradients.NONE
)
参数
-
ys
Tensor
或要区分的张量列表。 -
xs
Tensor
或用于微分的张量列表。 -
grad_ys
可选的。Tensor
或与ys
大小相同的张量列表,并保存为ys
中的每个 y 计算的梯度。 -
name
用于将所有渐变操作分组在一起的可选名称。默认为'gradients'。 -
colocate_gradients_with_ops
如果为 True,请尝试将渐变与相应的操作放在一起。 -
gate_gradients
如果为 True,则在为操作返回的梯度周围添加一个元组。这避免了一些竞争条件。 -
aggregation_method
指定用于组合梯度项的方法。接受的值是在类AggregationMethod
中定义的常量。 -
stop_gradients
可选的。Tensor
或不区分的张量列表。 -
unconnected_gradients
可选的。指定给定输入张量未连接时返回的梯度值。接受的值是在类tf.UnconnectedGradients
中定义的常量,默认值为none
。
返回
-
长度为
len(xs)
的Tensor
列表,其中每个张量是sum(dy/dx)
:对于ys
中的 y 和xs
中的 x。
抛出
-
LookupError
如果x
和y
之间的操作之一没有注册的梯度函数。 -
ValueError
如果参数无效。 -
RuntimeError
如果在 Eager 模式下调用。
ys
和 xs
每个都是 Tensor
或张量列表。 grad_ys
是 Tensor
的列表,包含 ys
接收到的梯度。该列表的长度必须与 ys
相同。
gradients()
向图中添加操作以输出 ys
相对于 xs
的导数。它返回长度为 len(xs)
的 Tensor
列表,其中每个张量是 sum(dy/dx)
:对于 ys
中的 y 和 xs
中的 x。
grad_ys
是与 ys
长度相同的张量列表,其中包含 ys
中每个 y 的初始梯度。当 grad_ys
为 None 时,我们为 ys
中的每个 y 填充一个形状为 y 的 '1's 张量。用户可以提供他们自己的初始grad_ys
,以使用每个 y 的不同初始梯度来计算导数(例如,如果想要对每个 y 中的每个值以不同的方式加权梯度)。
stop_gradients
是一个 Tensor
或相对于所有 xs
被视为常数的张量列表。这些张量不会被反向传播,就好像它们已使用 stop_gradient
显式断开连接一样。除其他外,这允许计算偏导数而不是全导数。例如:
a = tf.constant(0.)
b = 2 * a
g = tf.gradients(a + b, [a, b], stop_gradients=[a, b])
这里的偏导数 g
计算为 [1.0, 1.0]
,而总导数 tf.gradients(a + b, [a, b])
考虑到 a
对 b
的影响并计算为 [3.0, 1.0]
。请注意,以上等价于:
a = tf.stop_gradient(tf.constant(0.))
b = tf.stop_gradient(2 * a)
g = tf.gradients(a + b, [a, b])
stop_gradients
提供了一种在图已经构建后停止梯度的方法,与在图构建期间使用的tf.stop_gradient
相比。当这两种方法结合使用时,反向传播会在 tf.stop_gradient
节点和 stop_gradients
中的节点处停止,以先遇到者为准。
对于所有 xs
,所有整数张量都被认为是常数,就好像它们包含在 stop_gradients
中一样。
unconnected_gradients
确定 xs 中每个 x 的返回值,如果它在图中未连接到 ys。默认情况下,这是 None 以防止错误。从数学上讲,这些梯度为零,可以使用 'zero'
选项请求。 tf.UnconnectedGradients
提供以下选项和行为:
a = tf.ones([1, 2])
b = tf.ones([3, 1])
g1 = tf.gradients([b], [a], unconnected_gradients='none')
sess.run(g1) # [None]
g2 = tf.gradients([b], [a], unconnected_gradients='zero')
sess.run(g2) # [array([[0., 0.]], dtype=float32)]
让我们举一个在反向传播阶段出现的实际例子。此函数用于评估成本函数关于权重 Ws
和偏差 bs
的导数。下面的示例实现提供了它实际用途的说明:
Ws = tf.constant(0.)
bs = 2 * Ws
cost = Ws + bs # This is just an example. So, please ignore the formulas.
g = tf.gradients(cost, [Ws, bs])
dCost_dW, dCost_db = g
相关用法
- Python tf.compat.v1.gfile.Copy用法及代码示例
- Python tf.compat.v1.gather用法及代码示例
- Python tf.compat.v1.gfile.Exists用法及代码示例
- Python tf.compat.v1.get_variable_scope用法及代码示例
- Python tf.compat.v1.get_local_variable用法及代码示例
- Python tf.compat.v1.get_variable用法及代码示例
- Python tf.compat.v1.gfile.FastGFile.close用法及代码示例
- Python tf.compat.v1.get_session_tensor用法及代码示例
- Python tf.compat.v1.get_session_handle用法及代码示例
- Python tf.compat.v1.gather_nd用法及代码示例
- Python tf.compat.v1.distributions.Multinomial.stddev用法及代码示例
- Python tf.compat.v1.distribute.MirroredStrategy.experimental_distribute_dataset用法及代码示例
- Python tf.compat.v1.data.TFRecordDataset.interleave用法及代码示例
- Python tf.compat.v1.distributions.Bernoulli.cross_entropy用法及代码示例
- Python tf.compat.v1.Variable.eval用法及代码示例
- Python tf.compat.v1.train.FtrlOptimizer.compute_gradients用法及代码示例
- Python tf.compat.v1.layers.conv3d用法及代码示例
- Python tf.compat.v1.strings.length用法及代码示例
- Python tf.compat.v1.data.Dataset.snapshot用法及代码示例
- Python tf.compat.v1.data.experimental.SqlDataset.reduce用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.compat.v1.gradients。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。