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%
x
heeft 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 = 6
of, 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 6
is.
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.