Hoe werkt Reducation_sum () in Tensorflow?

Ik leer TensorFlow, ik heb de volgende code van de Tensorflow-website opgehaald. Volgens mijn begrip is Axis = 0 voor rijen en as = 1 is voor kolommen.

Hoe krijgen ze uitvoer in opmerkingen? Ik heb de uitvoer genoemd volgens mijn denken tegen ##.

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 understand at all.

Antwoord 1, Autoriteit 100%

xheeft een vorm van (2, 3)(twee rijen en drie kolommen):

1 1 1
1 1 1

Door het doen van tf.reduce_sum(x, 0)de tensor wordt verminderd langs de eerste dimensie (rijen), dus het resultaat is [1, 1, 1] + [1, 1, 1] = [2, 2, 2].

Door tf.reduce_sum(x, 1)te doen, wordt de tensor verminderd langs de tweede dimensie (kolommen), dus het resultaat is [1, 1] + [1, 1] + [1, 1] = [3, 3].

Door het doen van tf.reduce_sum(x, [0, 1])de tensor wordt verminderd langs beide dimensies (rijen en kolommen), dus het resultaat is 1 + 1 + 1 + 1 + 1 + 1 = 6of, equivalent, [1, 1, 1] + [1, 1, 1] = [2, 2, 2], en dan 2 + 2 + 2 = 6(Verklein langs rijen, verminder vervolgens de geresulteerde array).


Antwoord 2, Autoriteit 34%

De ingang is een 2D-Tensor:

1 1 1
1 1 1

De 0-as in TensorFlow is de rijen, 1-as is de kolommen. Het bedrag langs de 0-as produceert een 1-D-tensor van de lengte 3, elk element is een bedrag per kolom. Het resultaat is dus [2, 2, 2]. Evenzo voor de rijen.

De som langs beide assen is in dit geval de som van alle waarden in de tensor, die 6is.

Vergelijking met 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

Zoals u kunt zien, is de uitvoer hetzelfde.


Antwoord 3, Autoriteit 34%

Om beter te begrijpen wat er aan de hand is, zal ik de waarden veranderen en de resultaten zijn zelfverklarend

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)

Antwoord 4, Autoriteit 14%

Denk het zo, de as geeft de dimensie aan die wordt geëlimineerd. Dus voor de eerste zaak-as 0, dus als u deze dimensie (2 vermeldingen) doorloopt, zullen ze allemaal inklappen in 1. Het is dus als volgt:

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

Dus u hebt dimensie verwijderd 0.

Nu, voor het tweede geval, zul je axis onderzocht 1(of kolommen), dus:

result = [[1,1] + [1,1] + [1,1]] = [3,3]

En het laatste geval is dat je blijft instorten in de volgorde die tussen haakjes is aangegeven. Met andere woorden, u verwijdert eerst de rijen en daarna de kolommen:

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

Hopelijk helpt dit!


Antwoord 5, autoriteit 5%

x heeft 2 rijen en 3 kolommen zodat:

1 1 1
1 1 1

Verkleinen langs rijen (tf.reduce_sum(x, 0)) betekent dat je van onder naar boven knijpt, zodat twee afzonderlijke rijen één rij worden. Het wordt [2,2,2].

Verkleinen langs kolommen(tf.reduce_sum(x, 1)) betekent dat je van rechts en links knijpt zodat 3 afzonderlijke kolommen 1 kolom worden, dwz [3,3].

Ten slotte tf.reduce_sum(x, [0, 1])betekent dat je eerst van onder en van boven knijpt
(het wordt [2,2,2]) en dan knijp je [2,2,2] van rechts en links zodat het 6 wordt.


Antwoord 6, autoriteit 2%

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

commando’s berekenen eerst de som over de as = 0 (rijsgewijs) en vervolgens berekenen ze de som over de as = 1 (kolomsgewijs)

Bijvoorbeeld

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

Je telt op in [2,2,2] nadat je de som over de as = 0 hebt berekend.
Je telt 2 + 2 + 2 op na het berekenen van de som over de as = 1.

Eindelijk, 6 als uitvoer krijgen.

Other episodes