tf.transpose()
一 函数原型
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()相关推荐
- 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 ...
- tensorflow的tf.transpose()简单使用
tf.transpose(input, [dimension_1, dimenaion_2,..,dimension_n]):这个函数主要适用于交换输入张量的不同维度用的,如果输入张量是二维,就相当是 ...
- tf.transpose
tf.transpose(input, [dimension_1,dimenaion_2,..,dimension_n]) 这个函数主要适用于交换输入张量的不同维度用的,如果输入张量是二维,就相当是转 ...
- tf.transpose()个人理解,高纬度的变换,可以将部分维度看成黑盒(整体)
一 函数原型 tf.transpose( a, perm=None, name='transpose', conjugate=False ) a:表示的是需要变换的张量 perm:a的新的维度序列 n ...
- tf.transpose()函数(转)
tensorflow里面许多针对数组操作的函数,官方文档又看了没啥卵用,网上帖子直接copy官方文档而不解释,只能自己写个程序测试理解,以3个维度的tensor进行理解 tf.transpose()作 ...
- tf.transpose详解(能懂版)
看到网上大部分博客都没说清楚,就来写一篇 tf.transpose()官方例程: def transpose(a, perm=None, name="transpose"):&qu ...
- tf.transpose用法
tf.transpose:意为转置 转置`a`. 根据`perm`排列尺寸. 返回的张量的维度i将对应于输入维`perm [i]`. 如果未给出`perm`,则将其设置为(n-1 ... 0),其中n ...
- tf 矩阵行和列交换_tf.transpose函数的用法讲解
tf.transpose函数中文意思是转置,对于低维度的转置问题,很简单,不想讨论,直接转置就好(大家看下面文档,一看就懂). tf.transpose(a, perm=None, name='tra ...
- 通俗易懂!使用Excel和TF实现Transformer
作者 | 石晓文 转载自小小挖掘机(ID:wAIsjwj) 本文旨在通过最通俗易懂的过程来详解Transformer的每个步骤! 假设我们在做一个从中文翻译到英文的过程,我们的词表很简单如下: 中文词 ...
最新文章
- java.lang.UnsupportedClassVersionError: Bad version number in .class file
- C++需要输出一个参数的地址时可能达不到预期的效果
- [笔记]路由器与交换机的区别
- spark.mllib:NaiveBayes
- C算法--入门 2.3
- IOS - IPhone或IPAD,如何恢复出厂操作系统?
- Jquery加载默认值
- git如何merge github forked repository里的代码更新?
- 深入理解Linux守护进程
- 极简潮流!最新海报欣赏给你设计灵感
- 《The One!团队》第八次作业:ALPHA冲刺(三)
- 三星s10刷android原生,【极光ROM】-【三星S10E/S10/S10+ G97XX-9820】-【V12.0 Android-Q-TD1】...
- hud android,HUD | F-Droid - Free and Open Source Android App Repository
- 测试小兵成长记:新兵营
- uniapp苹果支付
- 记录一次 CPU sy 过高的排查经历
- 第三章直接耦合多级放大电路
- 同济大学C++mooc第12讲:文件
- 人工智能都可以写代码了,程序员怎么做才能不被时代淘汰?
- Internet Explorer 编程简述(序)
热门文章
- spin_lock、spin_lock_bh、spin_lock_irq、spin_lock_irqsave的使用
- 使用Docker安装HomeAssistant
- 欧几里得扩展欧几里得
- LINUX防火墙开放端口,查看状态,查看开放端口
- Java程序设计基础【10】
- ehviewer_EhViewer官方下载_EhViewer最新版app下载 安卓版v1.7.1 - 浪浪下载
- Springboot 国际化语言(浏览器切换)
- 分享|2023年全球市场准入认证咨讯
- Linux查看用户登录的历史记录
- 网络流:最大流,最小割 基本概念及算法