Tensorflow覆蓋多個運營商爲Tensor
類,including __lt__
, __ge__
等爲什麼Tensorflow不會覆蓋__eq__?
然而,__eq__
seems to be conspicuously absent實施:
ops.Tensor._override_operator("__lt__", gen_math_ops.less)
ops.Tensor._override_operator("__le__", gen_math_ops.less_equal)
ops.Tensor._override_operator("__gt__", gen_math_ops.greater)
ops.Tensor._override_operator("__ge__", gen_math_ops.greater_equal)
爲什麼==
爲tensorflow的張量不行爲的方式爲numpy的數組一樣嗎?
代碼示例:
a = tf.constant([1,2])
b = tf.constant([3,4])
a == b
>>> False
a < b
>>> <tf.Tensor 'Less:0' shape=(2,) dtype=bool>
隨着numpy的,在另一方面:
a = np.asarray([1,2])
b = np.asarray([3, 4])
a == b
>>> array([False, False], dtype=bool)
你是否認爲'__eq__'沒有單獨定義在這些行上?因爲我看到[其他代碼以通用方式處理運算符覆蓋](例如,https://github.com/tensorflow/tensorflow/blob/27767d8e9c1325979cf32ff5b81c10df9006fd57/tensorflow/python/ops/math_ops.py#L875-L935)。 –
'將tensorflow導入爲tf',然後'__eq__ in vars(tf.Tensor)'產生'True',所以它確定了鉤子。它是[直接在課堂上]定義的(https://github.com/tensorflow/tensorflow/blob/27767d8e9c1325979cf32ff5b81c10df9006fd57/tensorflow/python/framework/ops.py#L489-L491)。 –
@MartijnPieters不,我的觀察結果是基於我的代碼沒有做到我期望的。鏈接是在一些挖掘後產生的。另外,我知道張量的平等是被定義的。但是,它不符合'numpy'數組。我希望附加的代碼能夠澄清這個問題。 –