Domanda Sovraccarico dell'operatore TensorFlow


Qual è la differenza tra

   tf.add(x, y)

e

   x + y

in TensorFlow? Cosa sarebbe diverso nel tuo grafico di calcolo quando costruisci il tuo grafico con + invece di tf.add()?

Più in generale, lo sono + o altre operazioni sovraccaricate per i tensori?


23
2018-01-29 22:06


origine


risposte:


Se almeno uno di x o y è un tf.Tensor oggetto, le espressioni tf.add(x, y) e x + y sono equivalenti. La ragione principale che potresti usare tf.add() è specificare un esplicito name argomento parola chiave per l'operazione creata, che non è possibile con la versione dell'operatore sovraccarico.

Si noti che se nessuno dei due x né y è un tf.Tensor-Per esempio se sono array NumPy-allora x + y non creerà un op TensorFlow. tf.add() crea sempre un op TensorFlow e converte i suoi argomenti in tf.Tensor oggetti. Pertanto, se stai scrivendo una funzione di libreria che potrebbe accettare sia tensori che array NumPy, potresti preferire l'uso tf.add().

I seguenti operatori sono sovraccaricati nell'API Python TensorFlow:

  • __neg__ (unario -)
  • __abs__ (abs())
  • __invert__ (unario ~)
  • __add__ (binario +)
  • __sub__ (binario -)
  • __mul__ (binario elementwise *)
  • __div__ (binario / in Python 2)
  • __floordiv__ (binario // in Python 3)
  • __truediv__ (binario / in Python 3)
  • __mod__ (binario %)
  • __pow__ (binario **)
  • __and__ (binario &)
  • __or__ (binario |)
  • __xor__ (binario ^)
  • __lt__ (binario <)
  • __le__ (binario <=)
  • __gt__ (binario >)
  • __ge__ (binario >=)

Notare che, __eq__ (binario == ) è non sovraccarico. x == y restituirà semplicemente un booleano Python se x e y fare riferimento allo stesso tensore. Devi usare tf.equal() esplicitamente per verificare l'uguaglianza degli elementi. Lo stesso vale per non uguale, __ne__ (binario != ).


50
2018-01-29 22:17