web-dev-qa-db-fra.com

Comment reduction_sum () fonctionne-t-il dans tensorflow?

J'apprends tensorflow, j'ai récupéré le code suivant sur le site Web tensorflow. D'après ce que j'ai compris, axe = 0 pour les lignes et axe = 1 pour les colonnes.

Comment obtiennent-ils la sortie mentionnée dans les commentaires? J'ai mentionné la sortie selon ma pensée contre ##.

import tensorflow as tf

x = tf.constant([[1, 1, 1], [1, 1, 1]])
tf.reduce_sum(x, 0)  # [2, 2, 2] ## [3, 3]
tf.reduce_sum(x, 1)  # [3, 3] ##[2, 2, 2]
tf.reduce_sum(x, [0, 1])  # 6 ## Didn't understood at all.
21
Bhaskar Dhariyal

x a la forme de (2, 3) (deux lignes et trois colonnes):

1 1 1
1 1 1

En faisant tf.reduce_sum(x, 0), le tenseur est réduit le long de la première dimension (lignes), le résultat est donc [1, 1, 1] + [1, 1, 1] = [2, 2, 2].

En faisant tf.reduce_sum(x, 1), le tenseur est réduit le long de la deuxième dimension (colonnes). Le résultat est donc [1, 1] + [1, 1] + [1, 1] = [3, 3].

En faisant tf.reduce_sum(x, [0, 1]), le tenseur est réduit le long des DEUX dimensions (lignes et colonnes), le résultat est donc 1 + 1 + 1 + 1 + 1 + 1 = 6 Ou, de manière équivalente, [1, 1, 1] + [1, 1, 1] = [2, 2, 2], Puis 2 + 2 + 2 = 6 (réduire le long des lignes, puis réduire le tableau obtenu).

38

L'entrée est un tenseur 2D:

1 1 1
1 1 1

L'axe 0 dans tensorflow correspond aux lignes, 1 axe aux colonnes. La somme sur l’axe 0 produira un tenseur 1-D de longueur 3, chaque élément est une somme par colonne. Le résultat est donc [2, 2, 2]. De même pour les lignes.

La somme des deux axes est, dans ce cas, la somme de toutes les valeurs du tenseur, qui est 6.

Comparaison avec numpy :

a = np.array([[1, 1, 1], [1, 1, 1]])
np.sum(a, axis=0)       # [2 2 2] 
np.sum(a, axis=1)       # [3 3]
np.sum(a, axis=(0, 1))  # 6

Comme vous pouvez le constater, le résultat est le même.

22
Maxim

Afin de mieux comprendre ce qui se passe, je vais changer les valeurs et les résultats sont explicites.

import tensorflow as tf

x = tf.constant([[1, 2, 4], [8, 16, 32]])
a = tf.reduce_sum(x, 0)  # [ 9 18 36]
b = tf.reduce_sum(x, 1)  # [ 7 56]
c = tf.reduce_sum(x, [0, 1])  # 63

with tf.Session() as sess:
  output_a = sess.run(a)
  print(output_a)
  output_b = sess.run(b)
  print(output_b)
  output_c = sess.run(c)
  print(output_c)
13
Enrique Ortuño

Pensez-y comme ça, l'axe indique la dimension qui sera éliminée. Donc, pour le premier axe de cas 0, donc si vous passez par cette dimension (2 entrées), elles seront toutes réduites à 1. Ainsi, ce sera comme suit:

result = [[1,1,1] + [1,1,1]] = [2,2,2] 

Donc, vous avez supprimé la dimension 0.

Maintenant, pour le second cas, vous allez réduire l’axe 1 (ou des colonnes), donc:

result = [[1,1] + [1,1] + [1,1]] = [2,2]

Et le dernier cas est que vous continuez à vous effondrer dans l’ordre indiqué entre parenthèses. En d'autres termes, vous supprimez d'abord les lignes, puis les colonnes:

result1 = [2,2,2]
result_final = 2 + 2 + 2 = 6 

J'espère que cela t'aides!

4
asakryukin
tf.reduce_sum(x, [0, 1]) 

les commandes calculeront d'abord la somme sur l'axe = 0 (en lignes), puis calculeront la somme sur l'axe = 1 (en colonnes)

Par exemple,

 x = tf.constant([[1, 1, 1], [1, 1, 1]])

Vous additionnez dans [2,2,2] après avoir calculé la somme sur l'axe = 0. Vous additionnez 2 + 2 + 2 après le calcul de la somme sur l'axe = 1.

Enfin, obtenir 6 en sortie.

0
Ashiq Imran