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:
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.
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).