【问题标题】:How tf.transpose works in tensorflow?tf.transpose 如何在张量流中工作?
【发布时间】:2017-09-19 16:33:34
【问题描述】:
tf.transpose(a, perm=None, name='transpose')

转置a。它根据 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)
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

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

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

【问题讨论】:

    标签: python numpy matrix matplotlib tensorflow


    【解决方案1】:

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

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

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

    您想要在这里进行的操作是保持“深度”维度不变的操作。因此,在轴参数中,深度轴,即0th 轴,需要保持不变。轴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 互换)。

    【讨论】:

    • 所以你的意思是张量流中每个图像的初始轴是 [0,1,2] ?其中 1 是垂直的,那么 0 和 2 是什么? 2是水平的?现在我构建了一个旋转图像的程序,所以如果我使用 [1,0,2] 则图像正在旋转,否则如果我使用其他组合它不会旋转。
    • 或者 2 是 2d 维度,0 是水平的,1 是垂直的 [0,1,2] ?
    • 对于图像 0 是垂直的,1 是水平的。查看更新的答案。
    猜你喜欢
    • 2018-06-30
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    相关资源
    最近更新 更多