tf.transpose如何在tensorflow中工作?

时间:2017-04-22 19:20:42

标签: python numpy matrix matplotlib tensorflow

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

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

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

结果是:

[[[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

现在如果我使用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)))

结果是:

[[[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

由于这个原因,我很困惑,我有两个问题:

  • 每当我要转置矩阵时,我必须给予烫发[0,2,1] 默认?
  • 这里有什么是0,2,1?

1 个答案:

答案 0 :(得分:20)

查看numpy.transpose文档,我们发现transpose接受了参数

  

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

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

你想要在这里进行的操作是一个离开"深度"维度不变。因此,在axes参数中,深度轴(0轴需要保持不变。轴12(其中1是垂直轴)需要更改位置。因此,您将轴顺序从初始[0,1,2]更改为[0,2,1][stays the same, changes with other, changes with other])。

在tensorflow中,由于某种原因,他们将axes重命名为perm。上面的论点保持不变。

图片

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

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

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

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

enter image description here