構造 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。