Cum funcționează reduce_sum() în tensorflow? (Programare, Python, Tensorflow, Matrice Multidimensională, Reduce, Tensor)

Bhaskar Dhariyal a intrebat.

Învăț tensorflow, am preluat următorul cod de pe site-ul tensorflow. Conform înțelegerii mele, axa=0 este pentru rânduri și axa=1 este pentru coloane.

Cum obțin ieșirea menționată în comentarii? Am menționat ieșirea în funcție de gândirea mea față de ##.

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.

6 răspunsuri
Dmitriy Danevskiy

x are o formă de (2, 3) (două rânduri și trei coloane):

1 1 1
1 1 1

Făcând tf.reduce_sum(x, 0) tensorul este redus de-a lungul primei dimensiuni (rânduri), astfel încât rezultatul este [1, 1, 1] + [1, 1, 1] = [2, 2, 2].

Prin această operație tf.reduce_sum(x, 1) tensorul se reduce de-a lungul celei de-a doua dimensiuni (coloane), astfel încât rezultatul este [1, 1] + [1, 1] + [1, 1] = [3, 3].

Prin această operațiune tf.reduce_sum(x, [0, 1]) tensorul este redus de-a lungul AMBELE dimensiuni (rânduri și coloane), astfel încât rezultatul este 1 + 1 + 1 + 1 + 1 + 1 = 6 sau, în mod echivalent, [1, 1, 1] + [1, 1, 1] = [2, 2, 2], și apoi 2 + 2 + 2 = 6 (se reduce de-a lungul rândurilor, apoi se reduce matricea rezultată).

Comentarii

  • În acest exemplu, tf.reduce_sum(x) este, de asemenea, echivalent cu tf.reduce_sum(x, [0, 1]). Cu alte cuvinte, dacă nu specificați dimensiunile pe care să se facă reducerea, se va reduce pe toate dimensiunile. –  > Por Vivek Subramanian.
Maxim

Intrarea este un tensor 2-D:

1 1 1
1 1 1

Axa 0 în tensorflow reprezintă rândurile, iar axa 1 reprezintă coloanele. Suma de-a lungul axei 0 va produce un tensor 1-D de lungime 3fiecare element este o sumă pe coloană. Rezultatul este astfel [2, 2, 2]. La fel și pentru rânduri.

Suma de-a lungul ambelor axe este, în acest caz, suma tuturor valorilor din tensor, care este 6.

Comparație cu :

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

După cum puteți vedea, rezultatul este același.

Enrique Ortuño

Pentru a înțelege mai bine ce se întâmplă, voi schimba valorile, iar rezultatele sunt de la sine înțelese

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)

asakryukin

Gândește-te așa, axa indică dimensiunea care va fi eliminată. Deci, pentru primul caz, axa 0, deci dacă treci prin această dimensiune (2 intrări) toate se vor prăbuși în 1. Astfel va fi în felul următor:

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

Deci, ați eliminat dimensiunea 0.

Acum, pentru cel de-al doilea caz, se va prăbuși axa 1 (sau coloane), astfel:

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

Iar în ultimul caz, veți continua să colapsați în ordinea indicată în paranteze. Cu alte cuvinte, mai întâi eliminați rândurile și apoi coloanele:

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

Sper că vă ajută!

Arwen

x are 2 rânduri și 3 coloane astfel încât:

1 1 1
1 1 1

Reducând de-a lungul rândurilor (tf.reduce_sum(x, 0)) înseamnă că se comprimă de jos în sus, astfel încât două rânduri separate să devină un singur rând. Acesta va deveni [2,2,2,2].

Reducerea de-a lungul coloanelor (tf.reduce_sum(x, 1)) înseamnă că se strânge din dreapta și din stânga, astfel încât 3 coloane separate să devină o singură coloană, adică [3,3].

În cele din urmă tf.reduce_sum(x, [0, 1]) înseamnă că mai întâi se comprimă de jos și de sus(va deveni [2,2,2]) și apoi se comprimă [2,2,2] din dreapta și din stânga, astfel încât va deveni 6.

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

comenzile vor calcula mai întâi suma pe axă = 0 (pe rând), apoi vor calcula suma pe axă = 1 (pe coloană)

De exemplu,

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

Faceți suma în [2,2,2,2] după ce ați calculat suma pe axă = 0. Faceți suma 2 + 2 + 2 + 2 după ce ați calculat suma pe axă = 1.

În cele din urmă, obțineți 6 ca rezultat.