-1
我以TensorFlow開始,我正嘗試創建一個二進制網絡。更具體地說,我正在尋找一個哈希網絡,它將編碼一個大小爲n的二進制向量的圖像。所以我有一個經典的網絡,我在softmax之前將最後一層二值化。tf.sign如何處理反向傳播?
TensorFlow提供了一個tf.sign
函數可以做到這一點,但我無法弄清楚反向傳播在實際中如何工作,因爲它不是連續的。
有什麼想法?
我以TensorFlow開始,我正嘗試創建一個二進制網絡。更具體地說,我正在尋找一個哈希網絡,它將編碼一個大小爲n的二進制向量的圖像。所以我有一個經典的網絡,我在softmax之前將最後一層二值化。tf.sign如何處理反向傳播?
TensorFlow提供了一個tf.sign
函數可以做到這一點,但我無法弄清楚反向傳播在實際中如何工作,因爲它不是連續的。
有什麼想法?
不幸的是tf.sign()
的梯度總是被定義爲0
(可能是因爲有定義它沒有什麼好辦法。)
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/math_grad.py#L542
@ops.RegisterGradient("Sign")
def _SignGrad(op, _):
"""Returns 0."""
x = op.inputs[0]
return array_ops.zeros(array_ops.shape(x), dtype=x.dtype)