tensorflow remplace plusieurs opérateurs pour la classe Tensor
, including __lt__
, __ge__
, etc.Pourquoi Tensorflow ne remplace pas __eq__?
Cependant, la mise en œuvre de __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)
Pourquoi ==
pour les tenseurs de tensorflow se comportent pas de la même manière que pour les tableaux numpy?
Exemple de code:
a = tf.constant([1,2])
b = tf.constant([3,4])
a == b
>>> False
a < b
>>> <tf.Tensor 'Less:0' shape=(2,) dtype=bool>
Avec numpy, d'autre part:
a = np.asarray([1,2])
b = np.asarray([3, 4])
a == b
>>> array([False, False], dtype=bool)
Vous basez-vous sur l'affirmation que '__eq__' n'est pas défini uniquement sur ces lignes? Parce que je vois [autre code qui gère les remplacements de l'opérateur d'une manière générique] (https://github.com/tensorflow/tensorflow/blob/27767d8e9c1325979cf32ff5b81c10df9006fd57/tensorflow/python/ops/math_ops.py#L875-L935) par exemple. –
'importer tensorflow comme tf', puis' __eq__ dans vars (tf.Tensor) 'produit' True', donc il définit le crochet. Il est défini [directement sur la classe] (https://github.com/tensorflow/tensorflow/blob/27767d8e9c1325979cf32ff5b81c10df9006fd57/tensorflow/python/framework/ops.py#L489-L491). –
@MartijnPieters Non, mes observations étaient basées sur mon code ne faisant pas ce que je m'attendais à faire. Les liens ont été produits après quelques fouilles. Aussi, je sais que l'égalité des tenseurs est définie. Cependant, il n'est pas compatible avec les tableaux 'numpy'. J'espère que le code ajouté clarifie la question. –