tensorflow框架中幾種計算梯度的方式

2021-09-17 18:29:01 字數 1859 閱讀 6840

tf.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關於xs的梯度,tf.gradients返回的結果是乙個長度為len(xs)的tensor列表list,每個張量為sum(dy/dx),即ys關於xs的導數。

例子:tf.gradients(y, [x1, x2, x3]返回[dy/dx1, dy/dx2, dy/dx3]

當y與x無關時,即graph無x到y的路徑, 則求y關於x的梯度時返回[none]

引數stop_gradients指定的變數對當前梯度求解而言, 梯度求解將止於這些變數。

例項:

a = tf.constant(0.)

b = 2 * a

g = tf.gradients(a + b, [a, b], stop_gradients=[a, b]) #梯度計算不再追溯a,b之前的變數

輸出:

in:  sess.run(g) 

out:[1.0, 1.0]

如果不設定stop_gradients引數則反向傳播梯度計算將追溯到最開始的值a,輸出結果為:

in : sess.run(g)

out: [3.0, 1.0]

具體查閱:tf.gradients官網教程

compute_gradients(

loss,

var_list=none,

gate_gradients=gate_op,

aggregation_method=none,

colocate_gradients_with_ops=false,

grad_loss=none

)

optimizer.compute_gradientstf.gradients的封裝1.

optimizer.minimize()的第一步,返回(gradient, variable)的列表,其中gradient是tensor。

直觀上,optimizer.compute_gradients只比tf.gradients多了乙個variable輸出。

具體查閱:optimizer.compute_gradients官網教程

tf.stop_gradient(

input,

name=none

)

tf.stop_gradient阻止input的變數參與梯度計算,即在梯度計算的過程中遮蔽input之前的graph。

返回:關於input的梯度

應用:em演算法,其中m步驟不應涉及通過e步驟的輸出的反向傳播。

boltzmann機器的對比散度訓練,在區分能量函式時,訓練不得反向傳播通過模型生成樣本的圖形。

對抗性訓練,通過對抗性示例生成過程不會發生反向訓練。

具體查閱: tf.stop_gradient官網教程

tensorflow中的幾種交叉熵

準備1 先說一下什麼是logit,logit函式定義為 是一種將取值範圍在 0,1 內的概率對映到實數域 inf,inf 的函式,如果p 0.5,函式值為0 p 0.5,函式值為負 p 0.5,函式值為正。相對地,softmax和sigmoid則都是將 inf,inf 對映到 0,1 的函式。在te...

TensorFlow框架 tensorflow基礎

1 圖預設已經註冊,一組表示 tf.operation計算單位的物件和tf.tensor,表示操作之間流動的資料單元的物件 2 獲取呼叫 tf.get default graph op sess或者tensor 的graph屬性 3 圖的建立和使用 執行tensorflow操作圖的類,使用預設註冊的...

TensorFlow深度學習框架

tensorflow支援python和c 兩種程式語言,再複雜的多層神經網路模型都可以用python來實現,如果業務使用其他程式設計也不用擔心,使用跨語言的grpc或者http服務也可以訪問使用tensorflow訓練好的智慧型模型。tensorflow 是乙個採用資料流圖 data flow gr...