我使用op「assign」來改變變量的值而不是「=」,但是我發現我得到的漸變是完全不同的。有誰能告訴我區別,爲什麼?謝謝! 樣變瓦特= W1到 OP1 = tf.assign(W,W1)sess.run(OP1)(Tensorflow)是否指定更改梯度計算?
2
A
回答
1
=
和tf.assign
是不同的操作。
=
是蟒操作,在其中一個python值分配給一個Python變量
tf.assign
是分配值給變量ref和返回分配操作一個Tensorflow操作。
=
在python中執行並且不影響計算圖。 tf.assign
是計算圖中的一個節點。
要理解,讓我們來運行這個簡單的腳本
import tensorflow as tf
x = tf.Variable(1)
y = tf.Variable(2)
x = y
print(x.name, y.name)
a = tf.Variable(1)
b = tf.Variable(2)
# override a, otherwise a content is 1
a = a.assign(b)
print(a.name, b.name)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print(sess.run([x, y, a, b]))
print(x.name, y.name)
輸出Variable_1:0 Variable_1:0
因爲=
在蟒蛇被執行,你已經覆蓋變量x
。
print(a.name, b.name)
輸出Assign:0 Variable_3:0
因爲您在計算圖中定義了一個賦值操作,現在a
是一個賦值操作。
當您運行定義圖表,您可以:
[2, 2, 2, 2]
但是,這些值計算方式不同:一種是在圖形計算,其他的沒有。
如果您忘記分配a
與tf.assign
(因此你改變線路a = a.assign(b)
到a.assign(b)
)創建的分配運算,那麼當你評估圖,你會得到:
[2, 2, 1, 2]
相關問題
- 1. Tensorflow:計算梯度w.r.t. sub-tensor
- 2. Tensorflow中邏輯運算符的梯度
- 3. Tensorflow Adam Multigpu梯度
- 4. 計算定向梯度直方圖
- 5. Tensorflow高效的每像素梯度計算
- 6. 爲什麼tensorflow在計算Sigmod的梯度時再次計算Sigmoid的輸出?
- 7. 如何梯度計算DeepDream
- 8. 沿梯度計算顏色
- 9. 計算梯度爲在Theano
- 10. 計算推力梯度:: device_vector
- 11. 用NumPy計算梯度
- 12. 計算css梯度差
- 13. 計算梯度方向
- 14. TensorFlow:是否有計算和更新最高k精度的度量標準?
- 15. Keras是否計算凍結層的梯度?
- 16. 張量流圖中的梯度是否計算錯誤?
- 17. Tensorflow梯度始終爲零
- 18. 理解TensorFlow計算難度
- 19. 計數梯度
- 20. 如何計算圖像梯度
- 21. scipy.optimize.minimize:一起計算hessian和梯度
- 22. 僅在蒙面區域計算梯度
- 23. 計算圖像的梯度矢量場
- 24. 使用autograd計算tSNE梯度
- 25. 誤差在計算梯度使用Python
- 26. 在OpenCV中計算3D梯度方向
- 27. 計算單位梯度矢量
- 28. 如何根據保存的圖形計算Tensorflow C++ API中的梯度
- 29. 爲什麼tensorflow POW將在梯度計算研究添加日誌
- 30. 如何確定我的ractive計算值是否已更改
謝謝很多你的解釋。但是,請你告訴我,op分配如何有助於梯度計算?我對此很困惑。 – Andy
其實我想改變變量的值而不改變梯度計算, – Andy
如果正確使用它,它不會改變梯度計算。 Tensorflow使用自動微分來計算梯度,因此賦值操作只是在包含指定變量的計算圖中創建一個新節點。如果你計算這個節點的漸變流動,它將通過沒有任何改變。通常你會發現梯度結果的差異,如果你混淆了assign和= ops,因爲你弄亂了圖節點 – nessuno