tf.transpose如何在tensorflow中工作?

ste*_*hen 12 python numpy matplotlib matrix tensorflow

tf.transpose(a, perm=None, name='transpose')
Run Code Online (Sandbox Code Playgroud)

转置一个.它根据烫发来排列尺寸.所以,如果我使用这个矩阵进行转换:

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)))
Run Code Online (Sandbox Code Playgroud)

结果是:

[[[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
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用perm参数,那么:

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)))
Run Code Online (Sandbox Code Playgroud)

结果是:

[[[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
Run Code Online (Sandbox Code Playgroud)

因此,我很困惑,我有两个问题:

  • 每当我想转置一个矩阵时,我必须将perm [0,2,1]作为默认值?
  • 什么是0,2,1这里?

Imp*_*est 22

看一下numpy.transpose文档,我们发现transpose接受了论证

axes:整数列表,可选
默认情况下,反转尺寸,否则根据给定的值置换轴.

因此默认调用transpose转换np.transpose(a, axes=[1,0])为2D情况,或np.transpose(a, axes=[2,1,0]).

您希望在此处执行的操作是保持"深度"维度不变的操作.因此,在轴参数中,深度轴(即0th轴)需要保持不变.轴1和2(其中1是垂直轴)需要改变位置.因此,您将轴顺序从初始更改[0,1,2]为[0,2,1]([stays the same, changes with other, changes with other]).

在张量流中,它们由于某种原因重命名axes为perm.上面的论点保持不变.

图片

关于图像,它们与问题中的数组不同.图像通常将x和y存储在前两个维度中,将通道存储在最后两个维度中[y,x,channel].

为了在2D换位的意义上"转置"图像,交换水平和垂直轴,你需要使用

np.transpose(a, axes=[1,0,2])
Run Code Online (Sandbox Code Playgroud)

(通道保持不变,x和y交换).

在此输入图像描述