3 votes

Somme par paire dans tensorflow

J'ai deux tenseurs A y B , tous deux de forme [10 5] . Comment calculer un tenseur C de la forme [10 5 5] tel que C[x, i, j] = A[x, i] + B[x, j] ?

Edit : il s'agit de l'analogue de la somme du produit extérieur, et non du produit extérieur lui-même.

3voto

MaxB Points 689

Un peu plus lisible et succinct que la réponse de @user1735003 :

A[:, :, None] + B[:, None, :]

(En fait, l'autre réponse intervertissait les axes)

0voto

pratyaksh Points 456

Actuellement, j'utilise la propriété log(e^x * e^y) == x+y pour accomplir l'ajout de la matmul fonctionnement :

op1 = tf.reshape(tf.exp(A), [10, -1, 1])
op2 = tf.reshape(tf.exp(B), [10, 1, -1])
C = tf.log(tf.matmul(op1, op2))

mais je suppose qu'il y aurait aussi une solution plus simple et plus rapide.

0voto

P-Gn Points 10410

Vous pouvez compter sur diffusion .

op1 = tf.expand_dims(A, axis=2)
op2 = tf.expand_dims(B, axis=1)
C = tf.add(op1, op2)

Attention, la solution de @MaxB n'est pas équivalente à celle-ci car l'opérateur [] est équivalent à un appel à strided_slice pas expand_dims .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X