tf.transpose函式的用法講解(多維情況,看似複雜,其實也簡單)
版權宣告:本文為博主原創文章,歡迎轉載,請標明出處。 https://blog.csdn.net/cc1949/article/details/78422704
tf.transpose函式中文意思是轉置,對於低維度的轉置問題,很簡單,不想討論,直接轉置就好(大家看下面文件,一看就懂)。
-
tf.transpose(a, perm=None, name='transpose')
-
Transposes a. Permutes the dimensions according to perm.
-
The returned tensor's dimension i will correspond to the input dimension perm[i]. If perm is not given, it is set to (n-1...0), where n is the rank of the input tensor. Hence by default, this operation performs a regular matrix transpose on 2-D input Tensors.
-
For example:
-
# 'x' is [[1 2 3]
-
# [4 5 6]]
-
tf.transpose(x) ==> [[1 4]
-
[2 5]
-
[3 6]]
-
# Equivalently
-
tf.transpose(x perm=[1, 0]) ==> [[1 4]
-
[2 5]
-
[3 6]]
-
# 'perm' is more useful for n-dimensional tensors, for n > 2
-
# 'x' is [[[1 2 3]
-
# [4 5 6]]
-
# [[7 8 9]
-
# [10 11 12]]]
-
# Take the transpose of the matrices in dimension-0
-
tf.transpose(b, perm=[0, 2, 1]) ==> [[[1 4]
-
[2 5]
-
[3 6]]
-
[[7 10]
-
[8 11]
-
[9 12]]]
-
Args:
-
•a: A Tensor.
-
•perm: A permutation of the dimensions of a.
-
•name: A name for the operation (optional).
-
Returns:
-
A transposed Tensor.
本文主要討論高維度的情況:
為了形象理解高維情況,這裡以矩陣組合舉例:
先定義下: 2 x (3*4)表示2個3*4的矩陣,(其實,它是個3維張量)。
x = [[[1,2,3,4],[5,6,7,8],[9,10,11,12]],[[21,22,23,24],[25,26,27,28],[29,30,31,32]]]
輸出:
---------------
[[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[[21 22 23 24]
[25 26 27 28]
[29 30 31 32]]]
---------------
重點來了:
tf.transpose的第二個引數perm=[0,1,2],0代表三維陣列的高(即為二維陣列的個數),1代表二維陣列的行,2代表二維陣列的列。
tf.transpose(x, perm=[1,0,2])代表將三位陣列的高和行進行轉置。
我們寫個測試程式如下:
-
import tensorflow as tf
-
#x = tf.constant([[1, 2 ,3],[4, 5, 6]])
-
x = [[[1,2,3,4],[5,6,7,8],[9,10,11,12]],[[21,22,23,24],[25,26,27,28],[29,30,31,32]]]
-
#a=tf.constant(x)
-
a=tf.transpose(x, [0, 1, 2])
-
b=tf.transpose(x, [0, 2, 1])
-
c=tf.transpose(x, [1, 0, 2])
-
d=tf.transpose(x, [1, 2, 0])
-
e=tf.transpose(x, [2, 1, 0])
-
f=tf.transpose(x, [2, 0, 1])
-
# 'perm' is more useful for n-dimensional tensors, for n > 2
-
# 'x' is [[[1 2 3]
-
# [4 5 6]]
-
# [[7 8 9]
-
# [10 11 12]]]
-
# Take the transpose of the matrices in dimension-0
-
#tf.transpose(b, perm=[0, 2, 1])
-
with tf.Session() as sess:
-
print ('---------------')
-
print (sess.run(a))
-
print ('---------------')
-
print (sess.run(b))
-
print ('---------------')
-
print (sess.run(c))
-
print ('---------------')
-
print (sess.run(d))
-
print ('---------------')
-
print (sess.run(e))
-
print ('---------------')
-
print (sess.run(f))
-
print ('---------------')
我們期待的結果是得到如下矩陣:
a: 2 x 3*4
b: 2 x 4*3
c: 3 x 2*4
d: 3 x 4*2
e: 4 x 3*2
f: 4 x 2*2
執行指令碼,結果一致,如下:
-
---------------
-
[[[ 1 2 3 4]
-
[ 5 6 7 8]
-
[ 9 10 11 12]]
-
[[21 22 23 24]
-
[25 26 27 28]
-
[29 30 31 32]]]
-
---------------
-
[[[ 1 5 9]
-
[ 2 6 10]
-
[ 3 7 11]
-
[ 4 8 12]]
-
[[21 25 29]
-
[22 26 30]
-
[23 27 31]
-
[24 28 32]]]
-
---------------
-
[[[ 1 2 3 4]
-
[21 22 23 24]]
-
[[ 5 6 7 8]
-
[25 26 27 28]]
-
[[ 9 10 11 12]
-
[29 30 31 32]]]
-
---------------
-
[[[ 1 21]
-
[ 2 22]
-
[ 3 23]
-
[ 4 24]]
-
[[ 5 25]
-
[ 6 26]
-
[ 7 27]
-
[ 8 28]]
-
[[ 9 29]
-
[10 30]
-
[11 31]
-
[12 32]]]
-
---------------
-
[[[ 1 21]
-
[ 5 25]
-
[ 9 29]]
-
[[ 2 22]
-
[ 6 26]
-
[10 30]]
-
[[ 3 23]
-
[ 7 27]
-
[11 31]]
-
[[ 4 24]
-
[ 8 28]
-
[12 32]]]
-
---------------
-
[[[ 1 5 9]
-
[21 25 29]]
-
[[ 2 6 10]
-
[22 26 30]]
-
[[ 3 7 11]
-
[23 27 31]]
-
[[ 4 8 12]
-
[24 28 32]]]
-
---------------
最後,總結下:
[0, 1, 2]是正常顯示,那麼交換哪兩個數字,就是把對應的輸入張量的對應的維度對應交換即可。
--------------------- 本文來自 cc19 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/cc1949/article/details/78422704?utm_source=copy
相關文章
- TypeScript魔法堂:函式型別宣告其實很複雜TypeScript函式型別
- 簡單的單例模式其實也不簡單單例模式
- Python-split()函式用法及簡單實現Python函式
- 多型 簡單講解多型
- PHP陣列函式的時間複雜度清單PHP陣列函式時間複雜度
- 多種情況解析深複製
- 執行緒池其實看懂了也很簡單執行緒
- 簡陋到極致便成了經典,看似很Low的開羅遊戲其實並不簡單遊戲
- 如何從最壞、平均、最好的情況分析複雜度?複雜度
- 害怕軟體的複雜嗎?其實複雜性是必須存在的 - ferd
- makefile 條件判斷用法和 自定函式用法簡單記錄函式
- 什麼情況下不能使用最壞情況評估演算法的複雜度?演算法複雜度
- 情況最簡單下的爬蟲案例爬蟲
- 新手也能看懂,訊息佇列其實很簡單佇列
- 建構函式,拷貝賦值函式的N種呼叫情況函式賦值
- fcntl函式用法詳解函式
- 資料複雜性和簡單
- 題解 P10249【【模板】多項式複合函式】函式
- 簡單程式的時間複雜度分析時間複雜度
- PostgreSQL 原始碼解讀(249)- 實現簡單的鉤子函式SQL原始碼函式
- EventLoop其實如此簡單OOP
- Promise 其實很簡單Promise
- 幾個簡單又實用的PHP函式PHP函式
- 《矮人要塞》:用最簡陋的影像,講最複雜的故事
- 萬字通俗講解何為複雜度複雜度
- PostgreSQL 原始碼解讀(216)- 實現簡單的擴充套件函式SQL原始碼套件函式
- Solr複雜查詢一:函式查詢Solr函式
- 看似簡單的hashCode和equals面試題,竟然有這麼多坑!面試題
- 快排其實很簡單
- 其實泛型很簡單泛型
- 簡單介紹MySQL索引失效的幾種情況MySql索引
- C++單繼承、多繼承情況下的虛擬函式表分析C++繼承函式
- java回撥函式-非同步回撥-簡明講解Java函式非同步
- 以實際情況切入,檢視MySQL複製問題的解決方案MySql
- GetModuleFileName函式的用法函式
- Instr函式的用法函式
- hive複雜資料型別的用法Hive資料型別
- python的四大函式講解Python函式