張量形狀的理解與相關(guān)操作

張量形狀的理解與相關(guān)操作

一.張量的形狀的判斷

Drawing (1).png

這里的A,B,C分布表示維度0,1,2

那如何理解shape呢,由左圖我們可以看到

和A這個方括號同維度的有[1 2],[4 5]兩個,所以維度0的長度為2,

而和B同維度的有0,2兩個,所以維度1的長度為2

所以左邊張量的shape=[2,2]

同理右圖的張量,

和A方括號同維度的只有[[1 2 3] [4 5 6]],所以維度0長度為1

和B方括號同維度的有[1 2 3], [4 5 6]兩個,所以維度1長度為2

和C同維度的有1,2,3,所以維度2長度為3

所以shape=[1,2,3]

二. tf.squeeze(input, squeeze_dims=None, name=None),維度去除

1.去掉所有長度為1的維度(相當(dāng)于去除那個維度的括號)。
舉個栗子:


#coding=utf-8

import tensorflow as tf;  

import numpy as np;  

B = np.array([[[[1],[2],[3] ],[[4],[5],[6] ]]])

#去除維度0和維度3,因為這兩個維度長度都為1  

y = tf.squeeze(B,0)  

with tf.Session() as sess:  

    print (sess.run(y),'\n') 

輸出:


[[1 2 3]
 [4 5 6]]

2.也可以去掉指定索引的維度(該維度長度必須為1):


#coding=utf-8

import tensorflow as tf;  

import numpy as np;  

#shape=[1,2,3,1]

B = np.array([[[[1],[2],[3] ],[[4],[5],[6] ]]])

#去除維度0

y = tf.squeeze(B,[0])  

with tf.Session() as sess:  

    print (sess.run(y),'\n') 

輸出:


[[[1]

  [2]

  [3]]

 [[4]

  [5]

  [6]]] 

三. tf.expand_dims(input, dim, name=None),擴(kuò)展維度

作用:跟squeeze作用相反,它在維度dim上擴(kuò)展一個長度為1的維度,原維度dim則被排在后面


#coding=utf-8

import tensorflow as tf;  

import numpy as np;  

B = np.array([[3,4],[5,6]])

# 在維度0的元素前面加括號

y = tf.expand_dims(B,0)  

y1 = tf.expand_dims(B,2)

#-1表示最后一維

y2 = tf.expand_dims(B,-1)  

print(B,'\n')

with tf.Session() as sess:  

    print ('y:shape=',y.shape,'\n',sess.run(y),'\n') 

    print ('y1:shape=',y1.shape,'\n',sess.run(y1),'\n') 

    print ('y2:shape=',y2.shape,'\n',sess.run(y2),'\n') 

輸出:


y:shape= (1, 2, 2) 

 [[[3 4]

  [5 6]]] 

y1:shape= (2, 2, 1) 

 [[[3]

  [4]]

 [[5]

  [6]]] 

y2:shape= (2, 2, 1) 

 [[[3]

  [4]]

 [[5]

  [6]]]

四.tf.transpose(input, [dimension_1, dimenaion_2,..,dimension_n])

作用:交換維度

舉個栗子:


A = np.array([[[1,2,3],[4,5,6]]])

#即:

[[ 

 [1 2 3]

 [4 5 6]

]]   

如果x=tf.transpose(A, [0,2,1])

1.那么首先找到維度0,2,1的長度


維度0的長度:  1

維度1的長度:  2

維度2的長度:  3

2.再按序?qū)懗?,2維的形狀的張量:


[

    [ 

        [    ]

        [    ]

[    ] 

    ]

]

3.若x的最后一維長度比A最后一維的長度小,則取將同列的元素按序放入x的最后一維,否則將x的同行元素按序放入最后一維,這里x和A的最后一維長度分別為2,3,所以將同列寫入最后一維,最后的結(jié)果為:


[[[1 4]

  [2 5]

  [3 6]]] 

代碼驗證:

import tensorflow as tf;  
import numpy as np;  

A = np.array([[[1,2,3],[4,5,6]]])  
x = tf.transpose(A, [0,2,1])  

y = tf.transpose(A, [0,1,2])  
with tf.Session() as sess:  
    print ('A:\n',A,'\n')  
    print ('x:\n',sess.run(x),'\n') 
    print ('y:\n',sess.run(y),'\n') 

輸出:

A:
 [[[1 2 3]
  [4 5 6]]] 

x:
 [[[1 4]
  [2 5]
  [3 6]]] 

y:
 [[[1 2 3]
  [4 5 6]]]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • TF API數(shù)學(xué)計算tf...... :math(1)剛開始先給一個運(yùn)行實例。tf是基于圖(Graph)的計算系統(tǒng)...
    MachineLP閱讀 4,065評論 0 1
  • 1. tf函數(shù) tensorflow 封裝的工具類函數(shù) | 操作組 | 操作 ||:-------------| ...
    南墻已破閱讀 5,630評論 0 5
  • 長歌短賦效詩仙,安坐海棠執(zhí)教鞭。 舊友新朋同受益,人中妙筆著新篇。
    艾思閱讀 595評論 19 31
  • 閨蜜在前段時間談了戀愛,于是她天天在我耳邊叨擾著人生的奇妙!剛開始的時候,我還會回應(yīng)著她,后來聽多了就沒什么感覺了...
    失眠君閱讀 332評論 0 1
  • 封裝繼承多態(tài) 封裝: 是把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對象操作,對不可信的...
    AllenYukin閱讀 1,902評論 1 1

友情鏈接更多精彩內(nèi)容