一 函数原型

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

a:表示的是需要变换的张量

perm:a的新的维度序列

name:操作的名字,可选的

conjugate:可选的,设置成True,那么就等于tf.conj(tf.transpose(input)),用的太少啦,这里不展示它的例子了!

二 例子

例子一:最简单的二维的transpose,就是矩阵的转置

import tensorflow as tf
import numpy as npA = 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))

结果:其实就是第一行变成第一列,第二行变成第二列,原本的大小是[2,3],现在变成了[3,2]

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

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

import tensorflow as tf
import numpy as npA=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())

结果:

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(perm=[0,2,1])也就是将第二维度和第三维度进行调换,得到的shape为[2,2,3],同理经过transpose(perm=[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].下面的代码你可以看出结论是正确的!

import tensorflow as tf
import numpy as npA=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])

结果:

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

例子三:四维,应用在图像上一般!

import tensorflow as tf
import numpy as npA=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))

结果:

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

你可以自己随便的输出几个点看看结果对不对,比如A[0][1][0][0]肯定是等于X[0][0][1][0],肯定等于Y[1][0][0][0].这里就不写啦!

三 对于四维的数组,[batch_size,height,width,nchannels],我们只需要旋转第二第三维度怎么操作,需要用到tf.transpose()和tf.reverse()

tf.reverse()我之前写过博客,可以查看:tf.reverse()

代码如下:

import tensorflow as tf
import numpy as npdef rotate_90_cc(inputs):rotates = tf.transpose(inputs, [0, 2, 1, 3])rotates = tf.reverse(rotates, axis=[1])return rotatesA=np.arange(24).reshape([2,3,2,2])
X=tf.transpose(A,[0,2,1,3])with tf.Session() as sess:print("A")print(A)print("X")print(sess.run(X))print("rotate_90_cc:")print(sess.run(rotate_90_cc(A)))print("我们取出A[0,:,:,0]与进行rotate_90_cc之后的结果看看,发现进行了逆时针选择90度:")print("A[0,:,:,0]:")print(A[0,:,:,0])print("rotate之后的结果")print(sess.run(rotate_90_cc(A))[0,:,:,0])

结果:你可以看到操作就是现将我们的tensor进行第二第三维度的transpose,之后在在axis=1上进行reverse.

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
[[[[ 0  1][ 4  5][ 8  9]][[ 2  3][ 6  7][10 11]]][[[12 13][16 17][20 21]][[14 15][18 19][22 23]]]]
rotate_90_cc:
[[[[ 2  3][ 6  7][10 11]][[ 0  1][ 4  5][ 8  9]]][[[14 15][18 19][22 23]][[12 13][16 17][20 21]]]]
我们取出A[0,:,:,0]与进行rotate_90_cc之后的结果看看,发现进行了逆时针选择90度:
A[0,:,:,0]:
[[ 0  2][ 4  6][ 8 10]]
rotate之后的结果
[[ 2  6 10][ 0  4  8]]

tf.transpose()相关推荐

  1. tf.reshape 和 tf.transpose 用法

    import tensorflow as tf x= tf.constant([[2,3],[4,5],[6,7]],tf.int32) print(x.numpy()) [[2 3][4 5][6 ...

  2. tensorflow的tf.transpose()简单使用

    tf.transpose(input, [dimension_1, dimenaion_2,..,dimension_n]):这个函数主要适用于交换输入张量的不同维度用的,如果输入张量是二维,就相当是 ...

  3. tf.transpose

    tf.transpose(input, [dimension_1,dimenaion_2,..,dimension_n]) 这个函数主要适用于交换输入张量的不同维度用的,如果输入张量是二维,就相当是转 ...

  4. tf.transpose()个人理解,高纬度的变换,可以将部分维度看成黑盒(整体)

    一 函数原型 tf.transpose( a, perm=None, name='transpose', conjugate=False ) a:表示的是需要变换的张量 perm:a的新的维度序列 n ...

  5. tf.transpose()函数(转)

    tensorflow里面许多针对数组操作的函数,官方文档又看了没啥卵用,网上帖子直接copy官方文档而不解释,只能自己写个程序测试理解,以3个维度的tensor进行理解 tf.transpose()作 ...

  6. tf.transpose详解(能懂版)

    看到网上大部分博客都没说清楚,就来写一篇 tf.transpose()官方例程: def transpose(a, perm=None, name="transpose"):&qu ...

  7. tf.transpose用法

    tf.transpose:意为转置 转置`a`. 根据`perm`排列尺寸. 返回的张量的维度i将对应于输入维`perm [i]`. 如果未给出`perm`,则将其设置为(n-1 ... 0),其中n ...

  8. tf 矩阵行和列交换_tf.transpose函数的用法讲解

    tf.transpose函数中文意思是转置,对于低维度的转置问题,很简单,不想讨论,直接转置就好(大家看下面文档,一看就懂). tf.transpose(a, perm=None, name='tra ...

  9. 通俗易懂!使用Excel和TF实现Transformer

    作者 | 石晓文 转载自小小挖掘机(ID:wAIsjwj) 本文旨在通过最通俗易懂的过程来详解Transformer的每个步骤! 假设我们在做一个从中文翻译到英文的过程,我们的词表很简单如下: 中文词 ...

最新文章

  1. java.lang.UnsupportedClassVersionError: Bad version number in .class file
  2. C++需要输出一个参数的地址时可能达不到预期的效果
  3. [笔记]路由器与交换机的区别
  4. spark.mllib:NaiveBayes
  5. C算法--入门 2.3
  6. IOS - IPhone或IPAD,如何恢复出厂操作系统?
  7. Jquery加载默认值
  8. git如何merge github forked repository里的代码更新?
  9. 深入理解Linux守护进程
  10. 极简潮流!最新海报欣赏给你设计灵感
  11. 《The One!团队》第八次作业:ALPHA冲刺(三)
  12. 三星s10刷android原生,【极光ROM】-【三星S10E/S10/S10+ G97XX-9820】-【V12.0 Android-Q-TD1】...
  13. hud android,HUD | F-Droid - Free and Open Source Android App Repository
  14. 测试小兵成长记:新兵营
  15. uniapp苹果支付
  16. 记录一次 CPU sy 过高的排查经历
  17. 第三章直接耦合多级放大电路
  18. 同济大学C++mooc第12讲:文件
  19. 人工智能都可以写代码了,程序员怎么做才能不被时代淘汰?
  20. Internet Explorer 编程简述(序)

热门文章

  1. spin_lock、spin_lock_bh、spin_lock_irq、spin_lock_irqsave的使用
  2. 使用Docker安装HomeAssistant
  3. 欧几里得扩展欧几里得
  4. LINUX防火墙开放端口,查看状态,查看开放端口
  5. Java程序设计基础【10】
  6. ehviewer_EhViewer官方下载_EhViewer最新版app下载 安卓版v1.7.1 - 浪浪下载
  7. Springboot 国际化语言(浏览器切换)
  8. 分享|2023年全球市场准入认证咨讯
  9. Linux查看用户登录的历史记录
  10. 网络流:最大流,最小割 基本概念及算法