web-dev-qa-db-fra.com

Comment fonctionne tf.transpose dans tensorflow?

tf.transpose(a, perm=None, name='transpose')

transpose a. Il permute les dimensions selon perm. Donc, si j'utilise cette matrice pour transformer:

import tensorflow as tt
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]="3"
import numpy as bb
ab=([[[1,2,3],[6,5,4]],[[4,5,6],[3,6,3]]])
v=bb.array(ab)
fg=tt.transpose(v)
print(v)

with tt.Session() as df:
    print("\n New tranformed matrix is: \n\n{}".format(df.run(fg)))

Le résultat est:

[[[1 2 3]
  [6 5 4]]

 [[4 5 6]
  [3 6 3]]]

 New tranformed matrix is: 

[[[1 4]
  [6 3]]

 [[2 5]
  [5 6]]

 [[3 6]
  [4 3]]]

Process finished with exit code 0

maintenant si j'utilise l'argument perm alors:

import tensorflow as tt
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]="3"
import numpy as bb
ab=([[[1,2,3],[6,5,4]],[[4,5,6],[3,6,3]]])
v=bb.array(ab)
fg=tt.transpose(v,perm=[0,2,1])
print(v)

with tt.Session() as df:
    print("\n New tranformed matrix is: \n\n{}".format(df.run(fg)))

Le résultat est:

[[[1 2 3]
  [6 5 4]]

 [[4 5 6]
  [3 6 3]]]

 New tranformed matrix is: 

[[[1 6]
  [2 5]
  [3 4]]

 [[4 3]
  [5 6]
  [6 3]]]

Process finished with exit code 0

Pour cette raison, je suis confus et j'ai deux questions:

  • Chaque fois que je veux transposer une matrice, je dois donner perm [0,2,1] par défaut?
  • Qu'est-ce que 0,2,1 ici?
12
stephen

En regardant la documentation numpy.transpose , nous constatons que transpose prend l'argument

axes: liste d'ints, facultatif
Par défaut, inversez les dimensions, sinon permutez les axes en fonction des valeurs données.

Ainsi, l'appel par défaut à transpose se traduit par np.transpose(a, axes=[1,0]) pour le cas 2D, ou np.transpose(a, axes=[2,1,0]).

L'opération que vous souhaitez effectuer ici est celle qui laisse inchangée la dimension "profondeur". Par conséquent, dans l'argument axes, les axes de profondeur, qui sont les 0 E axes, doivent rester inchangés. Les axes 1 Et 2 (Où 1 est l'axe vertical) doivent changer de position. Vous changez donc l'ordre des axes de [0,1,2] Initial à [0,2,1] ([stays the same, changes with other, changes with other]).

Dans tensorflow, ils ont pour une raison quelconque renommé axes en perm. L'argument ci-dessus reste le même.

images

Concernant les images, elles diffèrent des tableaux de la question. Les images ont normalement leurs x et y stockés dans les deux premières dimensions et le canal dans la dernière, [y,x,channel].

Afin de "transposer" une image dans le sens d'une transposition 2D, où les axes horizontal et vertical sont échangés, vous devez utiliser

np.transpose(a, axes=[1,0,2])

(le canal reste le même, x et y sont échangés).

enter image description here

22