切片在 tensorflow 中,支援基本的[?][?] …標準索引方式,也支援通過逗號分隔索引號的索引方式。考慮輸入x 為4 張32x32 大小的彩色,shape 為[4,32,32,3],首先建立張量:
x = tf.random.normal([4,32,32,3])
接下來我們使用索引方式讀取張量的部分資料。
in [51]: x[0]
out[51]:
in [52]: x[0][1]
out[52]:
in [53]: x[0][1][2]
out[53]:
in [54]: x[2][1][0][1]
out[54]:
當張量的維度數較高時,使用[?][?]. . . [?]的方式書寫不方便,可以採用[?, ?, … , ?]的方式索引,它們是等價的。
in [55]: x[1,9,2]
out[55]:
4.6 索引與切片[在此處鍵入] 17
通過?????: ???: ????切片方式可以方便地提取一段資料,其中start 為開始讀取位置的
索引,end 為結束讀取位置的索引(不包含end 位),step 為讀取步長。
以 shape 為[4,32,32,3]的張量為例:
in [56]: x[1:3]
out[56]:
start: end: step切片方式有很多簡寫方式,其中start、end、step 3 個引數可以根據需要選擇性地省略,全部省略時即::,表示從最開始讀取到最末尾,步長為1,即不跳過任何元in [57]: x[0,::]
out[57]:
為了更加簡潔,::可以簡寫為單個冒號:,如
in [58]: x[:,0:28:2,0:28:2,:]
out[58]:
表示取所有,隔行取樣,隔列取樣,所有通道資訊,相當於在的高寬各縮放至原來的50%。
我們來總結start: end: step切片的簡寫方式,其中從第乙個元素讀取時start 可以省略,
即start=0 是可以省略,取到最後乙個元素時end 可以省略,步長為1 時step 可以省略
切片的方式
意義start: end:step
從 start 開始讀取到end(不包含end),步長為step
start: end
從 start 開始讀取到end(不包含end),步長為1
start:
從 start 開始讀取完後續所有元素,步長為1
start::step
從 start 開始讀取完後續所有元素,步長為step
: end:step
從 0 開始讀取到end(不包含end),步長為step
:end
從 0 開始讀取到end(不包含end),步長為1
::step
每隔 step-1 個元素取樣所有
::讀取所有元素
:讀取所有元素
特別地,step 可以為負數,考慮最特殊的一種例子,step = −1時,start: end: −1表示從start 開始,逆序讀取至end 結束(不包含end),索引號??? ≤ ?????。考慮一0~9 簡單序列,逆序取到第1 號元素,不包含第1 號:
in [59]: x = tf.range(9)
x[8:0:-1]
out[59]:
逆序取全部元素:
in [60]: x[::-1]
out[60]:
逆序間隔取樣:
in [61]: x[::-2]
out[61]:
in [62]: x = tf.random.normal([4,32,32,3])
x[0,::-2,::-2]
out[62]:
當張量的維度數量較多時,不需要取樣的維度一般用單冒號:表示取樣所有元素,此時有可能出現大量的:出現。繼續考慮[4,32,32,3]的張量,當需要讀取g 通道上的資料時,前面所有維度全部提取,此時需要寫為:
in [63]: x[:,:,:,1]
out[63]:
為了避免出現像?[: , : , : ,1]這樣出現過多冒號的情況,可以使用⋯符號表示取多個維度上所有的資料,其中維度的數量需根據規則自動推斷:當切片方式出現⋯符號時,⋯符號左邊的維度將自動對齊到最左邊,⋯符號右邊的維度將自動對齊到最右邊,此時系統再自動推斷⋯符號代表的維度數量,它的切片
** 4.2 …切片方式小結
切片的方式
意義a,⋯,b
a 維度對齊到最左邊,b 維度對齊到最右邊,中間的維度全部讀取,其他維度按a/b 的方式讀取
a,⋯ a
維度對齊到最左邊,a 維度後的所有維度全部讀取,a 維度按a 方式讀取。這種情況等同於a 索引/切片方式
⋯,bb 維度對齊到最右邊,b 之前的所有維度全部讀取,b 維度按b 方式讀取
⋯讀取張量所有資料
考慮如下例子:
in [64]: x[0:2,...,1:]
out[64]:
張量的索引與切片方式多種多樣,尤其是切片操作,初學者容易犯迷糊。但其實本質上切片操作只有?????: ???: ????這一種基本形式,通過這種基本形式有目的地省略掉預設引數,從而衍生出多種簡寫方法,這也是很好理解的。它衍生的簡寫形式熟練後一看就能推測出省略掉的資訊,書寫起來也更方便快捷。由於深度學習一般處理的維度數在4 維以內,⋯操作符完全可以用:符號代替,因此理解了這些就會發現張量切片操作並不複雜。
Tensorflow2 0張量生成
tensorflow 1 tensor就是張量,多維陣列,多維列表,階表示張量的維數 dimension 維數階 名字例子 0 d標量scalar s 1 2 3 1 d向量vector v 1,2,3 2 d矩陣matrix m 1,2,3 4,5,6 7,8,9 n dn 張量tensor t ...
tensorflow2 0 維度變換
a tf.random.normal 4,28,28,3 a 1 tf.reshape a,4,784,3 shape 1 a 1 tf.reshape a,4,1,3 shape 和1等價 a 2 tf.reshape a,4,784 3 shape 2 a 2 tf.reshape a,4,1 ...
TensorFlow2 0張量的典型應用
1.標量 標量的典型用途之一是誤差值的表示 各種測量指標的表示,比如準確度,精度和召回率等。import tensorflow as tf 隨機模擬網路輸出 out tf.random.uniform 4 10 隨即構造樣本真實標籤 y tf.constant 2 3,2 0 one hot編碼 y...