前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tf.reverse()和tf.transpose()

tf.reverse()和tf.transpose()

作者头像
狼啸风云
修改2022-09-04 21:38:35
2.4K0
修改2022-09-04 21:38:35
举报
文章被收录于专栏:计算机视觉理论及其实现

一、tf.reverse()

代码语言:javascript
复制
tf.reverse(
    tensor,
    axis,
    name=None
)

参数:

  • tensor: 需要进行反转的张量,类型必须为其中的一个uint8, int8, uint16, int16, int32, int64, bool, bfloat16, half, float32, float64, complex64, complex128, string。最高维度为8-D
  • axis: 需要反转的axis,注意axis的范围是[-rank(tensor),rank(tensor))之间
  • name: 可选的

很显然可以看出,axis=[3]的时候也就是在最里面那一层进行reverse,axis=[2]的时候就是在倒数第二层进行reverse,那么就是对两个三维数组分别进行reverse,颠倒顺序,axis=[1]的时候在最外层进行颠倒,那么就将两个三维数组直接互换位置即可。

例1:

代码语言:javascript
复制
import tensorflow as tf
t=tf.constant([[
                [[ 0,  1,  2,  3],
                 [ 4,  5,  6,  7],
                 [ 8,  9, 10, 11]],
                    
                 [[12, 13, 14, 15],
                  [16, 17, 18, 19],
                  [20, 21, 22, 23]]
              ]])

# tensor 't' shape is [1, 2, 3, 4]
     
with tf.Session() as sess:
   print("t")
   print(sess.run(t))
   print("reverse at axis=[3]")
   print(sess.run(tf.reverse(t,axis=[3])))
   print("reverse at axis=[1]")
   print(sess.run(tf.reverse(t,axis=[1])))
   print("reverse at axis=[2]")
   print(sess.run(tf.reverse(t,axis=[2])))

Output:
---------------------
t
[[[[ 0  1  2  3]
   [ 4  5  6  7]
   [ 8  9 10 11]]

  [[12 13 14 15]
   [16 17 18 19]
   [20 21 22 23]]]]
reverse at axis=[3]
[[[[ 3  2  1  0]
   [ 7  6  5  4]
   [11 10  9  8]]

  [[15 14 13 12]
   [19 18 17 16]
   [23 22 21 20]]]]
reverse at axis=[1]
[[[[12 13 14 15]
   [16 17 18 19]
   [20 21 22 23]]

  [[ 0  1  2  3]
   [ 4  5  6  7]
   [ 8  9 10 11]]]]
reverse at axis=[2]
[[[[ 8  9 10 11]
   [ 4  5  6  7]
   [ 0  1  2  3]]

  [[20 21 22 23]
   [16 17 18 19]
   [12 13 14 15]]]]
-----------------------

例2:

在一般的数据处理中,我们会先图像进行翻转,也就是左右的颠倒,假设原始的图像的shape [batch_size,height,width,channel]翻转后shape不变,但是翻转后的变成

flips[i][j][width-k][l] = inputs[i][j][k][l]

对axis=[2]进行reverse

代码语言:javascript
复制
import tensorflow as tf
import numpy as np
     
A=np.arange(24).reshape([2,2,2,3])
Y=tf.reverse(A,axis=[2])
     
with tf.Session() as sess:
   print("A")
   print(A)
   print("Y")
   print(sess.run(Y))
   print("第一个图像样本的第一个channel的对应矩阵为A[0,:,:,0]:")
   print(A[0,:,:,0])
   print("将其左右进行翻转后的结果Y[0,:,:,0]:")
   print(sess.run(Y)[0,:,:,0])



OUtput:
-------------------------------------------------------
A
[[[[ 0  1  2]
   [ 3  4  5]]

  [[ 6  7  8]
   [ 9 10 11]]]


 [[[12 13 14]
   [15 16 17]]

  [[18 19 20]
   [21 22 23]]]]
Y
[[[[ 3  4  5]
   [ 0  1  2]]

  [[ 9 10 11]
   [ 6  7  8]]]


 [[[15 16 17]
   [12 13 14]]

  [[21 22 23]
   [18 19 20]]]]
第一个图像样本的第一个channel的对应矩阵为A[0,:,:,0]:
[[0 3]
 [6 9]]
将其左右进行翻转后的结果Y[0,:,:,0]:
[[3 0]
 [9 6]]
-----------------------------------------------------

例3:

将图像进行上下的翻转

代码语言:javascript
复制
import tensorflow as tf
import numpy as np
     
A = np.arange(24).reshape([2,2,2,3])
Y = tf.reverse(A,axis=[1])
     


with tf.Session() as sess:
   print("A")
   print(A)
   print("Y")
   print(sess.run(Y))
   print("第一个图像样本的第一个channel的对应矩阵为A[0,:,:,0]:")
   print(A[0,:,:,0])
   print("将其上下进行翻转后的结果Y[0,:,:,0]:")
   print(sess.run(Y)[0,:,:,0])


Output:
-------------------------------------------------------------
A
[[[[ 0  1  2]
   [ 3  4  5]]

  [[ 6  7  8]
   [ 9 10 11]]]


 [[[12 13 14]
   [15 16 17]]

  [[18 19 20]
   [21 22 23]]]]
Y
[[[[ 6  7  8]
   [ 9 10 11]]

  [[ 0  1  2]
   [ 3  4  5]]]


 [[[18 19 20]
   [21 22 23]]

  [[12 13 14]
   [15 16 17]]]]
第一个图像样本的第一个channel的对应矩阵为A[0,:,:,0]:
[[0 3]
 [6 9]]
将其上下进行翻转后的结果Y[0,:,:,0]:
[[6 9]
 [0 3]]
--------------------------------------------------------

例4:

图像处理--将图像翻转90度

代码语言:javascript
复制
import tensorflow as tf
import numpy as np
     
A = np.arange(24).reshape([2,2,2,3])
X = tf.transpose(A,perm=[0,2,1,3])
Y = tf.reverse(X,axis=[1])
     
with tf.Session() as sess:
   print("A")
   print(A)
   print("Y")
   print(sess.run(Y))
   print("第一个图像样本的第一个channel的对应矩阵为A[0,:,:,0]:")
   print(A[0,:,:,0])
   print("将其旋转90度的结果Y[0,:,:,0]:")
   print(sess.run(Y)[0,:,:,0])


Output:
---------------------------------------------------------
A
[[[[ 0  1  2]
   [ 3  4  5]]

  [[ 6  7  8]
   [ 9 10 11]]]

 [[[12 13 14]
   [15 16 17]]

  [[18 19 20]
   [21 22 23]]]]
Y
[[[[ 3  4  5]
   [ 9 10 11]]

  [[ 0  1  2]
   [ 6  7  8]]]

 [[[15 16 17]
   [21 22 23]]

  [[12 13 14]
   [18 19 20]]]]

第一个图像样本的第一个channel的对应矩阵为A[0,:,:,0]:
[[0 3]
 [6 9]]
将其旋转90度的结果Y[0,:,:,0]:
[[3 9]
 [0 6]]
---------------------------------------------------

二、tf.transpose()

代码语言:javascript
复制
tf.transpose(
    a,
    perm=None,
    name='transpose',
    conjugate=False
)
  • a: 表示的是需要变换的张量
  • perm: a的新的维度序列
  • name: 操作的名字,可选的
  • conjugate: 可选的,设置成True,那么就等于tf.conj(tf.transpose(input))

例1:

最简单的二维的transpose,就是矩阵的转置

代码语言:javascript
复制
import tensorflow as tf
import numpy as np
     
A = np.array([[1, 2, 3], [4, 5, 6]])
X = tf.transpose(A, [1, 0])
     
with tf.Session() as sess:
   print("original:",A)
   print("tranpose:",sess.run(X))


Output:
----------
original: 
[[1 2 3]
 [4 5 6]]
tranpose: 
[[1 4]
 [2 5]
 [3 6]]
---------

例2:

一个三维的array,shape为[i,j,k],可以看成是i个[j,k]的二维数组,那么i在这个三维数组的高度,j表示的是二维数组的行数,k表示的是二维数组的列数。

代码语言:javascript
复制
import tensorflow as tf
import numpy as np
     
A=np.arange(12).reshape([2,3,2])
X=tf.transpose(A,[0,2,1])
Y=tf.transpose(A,[1,0,2])

with tf.Session() as sess:
   print("original:")
   print(A)
   print("transpose [0,2,1]:")
   print(sess.run(X))
   print("transpose [0,2,1]‘s shape:")
   print(X.get_shape().as_list())
   print("transpose [1,0,2]:")
   print(sess.run(Y))
   print("transpose [1,0,2]'s shape")
   print(Y.get_shape().as_list())


Output:
----------------------------
original:
[[[ 0  1]
  [ 2  3]
  [ 4  5]]

 [[ 6  7]
  [ 8  9]
  [10 11]]]
transpose [0,2,1]:
[[[ 0  2  4]
  [ 1  3  5]]

 [[ 6  8 10]
  [ 7  9 11]]]
transpose [0,2,1]‘s shape:
[2, 2, 3]
transpose [1,0,2]:
[[[ 0  1]
  [ 6  7]]

 [[ 2  3]
  [ 8  9]]

 [[ 4  5]
  [10 11]]]
transpose [1,0,2]'s shape
[3, 2, 2]
------------------------------

原本输入的shape为[2,3,2],经过transpose(A, 0,2,1])也就是将第二维度和第三维度进行调换,得到的shape为[2,2,3],同理经过transpose(A, [1,0,2])将第一和第二维度进行调换,得到的shape为[3,2,2]。原本的A[1][1][0]经过transpose([0,2,1])之后变成了X[1][0][1]。同样的原本的A[0][1][1]经过transpose([1,0,2])也就变成了Y[1][0][1]。代码如下所示,

代码语言:javascript
复制
import tensorflow as tf
import numpy as np
     
A=np.arange(12).reshape([2,3,2])
X=tf.transpose(A,[0,2,1])
Y=tf.transpose(A,[1,0,2])
with tf.Session() as sess:
   print("A[1][1][0]:")
   print(A[1][1][0])
   print("transpose [0,2,1]:X[1][0][1]")
   print(sess.run(X)[1][0][1])
   print("A[0][1][1]:")
   print(A[0][1][1])
   print("transpose [1,0,2]:Y[1][0][1]")
   print(sess.run(Y)[1][0][1])


Output:
-----------------------------
A[1][1][0]:
8
transpose [0,2,1]:X[1][0][1]
8
A[0][1][1]:
3
transpose [1,0,2]:Y[1][0][1]
3
-----------------------------

例3:

四维,一般应用在图像上

代码语言:javascript
复制
import tensorflow as tf
import numpy as np
     
A=np.arange(24).reshape([2,3,2,2])
X=tf.transpose(A,[0,2,1,3])
Y=tf.transpose(A,[1,0,3,2])
    
with tf.Session() as sess:
   print("A")
   print(A)
   print("X.shape")
   print(X.get_shape().as_list())
   print("X")
   print(sess.run(X))
   print("Y.shape")
   print(Y.get_shape().as_list())
   print("Y")
   print(sess.run(Y))


Output:
--------------------
A
[[[[ 0  1]
   [ 2  3]]

  [[ 4  5]
   [ 6  7]]

  [[ 8  9]
   [10 11]]]


 [[[12 13]
   [14 15]]

  [[16 17]
   [18 19]]

  [[20 21]
   [22 23]]]]
X.shape
[2, 2, 3, 2]
X
[[[[ 0  1]
   [ 4  5]
   [ 8  9]]

  [[ 2  3]
   [ 6  7]
   [10 11]]]


 [[[12 13]
   [16 17]
   [20 21]]

  [[14 15]
   [18 19]
   [22 23]]]]
Y.shape
[3, 2, 2, 2]
Y
[[[[ 0  2]
   [ 1  3]]

  [[12 14]
   [13 15]]]


 [[[ 4  6]
   [ 5  7]]

  [[16 18]
   [17 19]]]


 [[[ 8 10]
   [ 9 11]]

  [[20 22]
   [21 23]]]]
-----------------

转载地址:

https://blog.csdn.net/m0_37393514/article/details/82259370

https://blog.csdn.net/m0_37393514/article/details/82259370

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年07月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、tf.reverse()
  • 二、tf.transpose()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档