2017-08-06 62 views
0

我正在讀取來自外部源的梯度值(即計算在其他地方完成,但我想在「主」網絡中累積不同的源),並且我想僅使用tensorflow中的apply_gradients()操作。問題是,漸變會以浮動形式發送。有沒有什麼辦法可以使用float數組來應用梯度和內置的Optimizer函數?Tensorflow:如何手動編輯梯度值

在一個非常簡單的示例/測試用例中,這是我基本上想要做的。

W = tf.Variable(1.0) 
b = tf.Variable(2.0) 

trainable_variables = [W, b] 

gradients = [0.05, 0.01] # Example gradients for W, b 

# ... Somehow make this gradient vector into a tensor 

optimizer.apply_gradients(zip(gradients_tensor, trainable_variables)) 
+0

你的問題不清楚,增加更多信息和示例代碼。 –

+0

好點,增加了我正在尋找的一個非常簡單的例子。 –

+0

你有沒有試過[tf.convert_to_tensor](https://www.tensorflow.org/api_docs/python/tf/convert_to_tensor)? – aseipel

回答

0

有這樣做,特別是,你可以創建佔位符爲您的外部梯度,並通過apply_gradients之前就簡單的算術他們結合他們的許多方面。

x = tf.Variable(...) 
f = x ** 2 
g = tf.gradients(f, x) 
my_gradient['x'] = tf.placeholder(...) # same size and type as x 

g = [(grad + my_gradient[var.name], var) for grad, var in g] 

optimizer.apply_gradients(g) 

現在在優化步驟中,只需將my_gradient ['x']的值feed_dict到計算的值。

如果他們不改變超時時間,你可以使用tf.constant()來代替,但是我看不到任何數學情況在ML中有一個常量(和非零)漸變。