tensorflow2 1的維度變換

2021-10-04 05:29:26 字數 4345 閱讀 9339

函式的作用是將tensor變換為引數shape的形式,其中shape為乙個列表形式,特殊的一點是列表中可以存在-1

-1代表的含義是不用我們自己指定這一維的大小,函式會自動計算,但列表只能存在乙個-1。(如果存在多個-1,就是乙個存在多解的方程)

a = tf.random.normal([4

,28,28

,3])

a.shape, a.ndim

out[74]

:(tensorshape([4

,28,28

,3])

,4)tf.reshape(a,[4

,784,3

]).shape

out[76]

: tensorshape([4

,784,3

])tf.reshape(a,[4

,-1,

3]).shape

out[77]

: tensorshape([4

,784,3

])tf.reshape(a,[4

,784*3

]).shape

out[78]

: tensorshape([4

,2352])

tf.reshape(a,[4

,-1]

).shape

out[79]

: tensorshape([4

,2352])

# 恢復

a = tf.random.normal([4

,28,28

,3])

tf.reshape(tf.reshape(a,[4

,-1]

),[4

,28,28

,3])

.shape

out[92]

: tensorshape([4

,28,28

,3])

tf.reshape(tf.reshape(a,[4

,-1]

),[4

,14,56

,3])

.shape

out[93]

: tensorshape([4

,14,56

,3])

tf.reshape(tf.reshape(a,[4

,-1]

),[4

,1,784,3

]).shape

out[94]

: tensorshape([4

,1,784,3

])

將a進行轉置,並且根據perm引數重新排列輸出維度.

tf.transpose

( a,

perm=

none

, name=

'transpose'

, conjugate=

false

)

a - 表示的是需要變換的張量

perm - a的新的維度序列

name - 操作的名字,可選的

conjugate - 可選的,設定成true,那麼就等於tf.conj(tf.transpose(input)),用的太少了

注:perm-控制轉置的操作,perm = [0, 1, 3, 2]表示,把將要轉置的第0和第1維度不變,將第2和第3維度進行轉置。

a = tf.random.normal((4

,3,2

,1))

a.shape

out[96]

: tensorshape([4

,3,2

,1])

tf.transpose(a)

.shape

out[98]

: tensorshape([1

,2,3

,4])

tf.transpose(a, perm =[0

,1,3

,2])

.shape

out[

100]

: tensorshape([4

,3,1

,2])

注:pytorch的資料格式一般是[b, 3, h, w], 而tensorflow的資料格式一般是[b, h, w, 3],所以資料傳遞時,需要做格式的轉換。

a = tf.random.normal([4

,28,28

,3])

# 乙個tensor格式

tf.transpose(a,[0

,2,1

,3])

.shape

out[

103]

: tensorshape([4

,28,28

,3])

tf.transpose(a,[0

,3,2

,1])

.shape

out[

104]

: tensorshape([4

,3,28

,28])

tf.transpose(a,[0

,3,1

,2])

.shape # 轉換成pytorch的資料格式

out[

105]

: tensorshape([4

,3,28

,28])

注:當axis為正數時,在tensor正向對應維度的左邊增加乙個維度

當axis為負數時,在tensor反向對應維度的右邊增加乙個維度

a = tf.random.normal([4

,35,8

])tf.expand_dims(a, axis =0)

.shape

out[

107]

: tensorshape([1

,4,35

,8])

tf.expand_dims(a, axis =3)

.shape

out[

108]

: tensorshape([4

,35,8

,1])

tf.expand_dims(a, axis =-1

).shape

out[

110]

: tensorshape([4

,35,8

,1])

tf.expand_dims(a, axis =-4

).shape

out[

111]

: tensorshape([1

,4,35

,8])

注,只能去掉shape = 1的維度,如[4, 35, 8, 1], 只能去掉最後為1的維度,axis可以指定值為1的維度

tf.squeeze(tf.zeros([1

,2,1

,1,3

])).shape

out[

112]

: tensorshape([2

,3])

tf.squeeze(a, axis =0)

.shape

out[

114]

: tensorshape([2

,1,3

])tf.squeeze(a, axis =2)

.shape

out[

115]

: tensorshape([1

,2,3

])tf.squeeze(a, axis =1)

.shape # 報錯

tensorflow.python.framework.errors_impl.invalidargumenterror: can not squeeze dim[1]

, expected a dimension of 1

, got 2

[op:squeeze]

tf.squeeze(a, axis =-2

).shape

out[

117]

: tensorshape([1

,2,3

])tf.squeeze(a, axis =-4

).shape

out[

118]

: tensorshape([2

,1,3

])

tensorflow2 1安裝指南

開啟anconda prompt 建立conda虛擬環境 用create n 新建乙個名叫tf2.1的環境用python3.7版本 conda create n tf2.1 python 3.7 進入tensorflow2.1環境 conda activate tf2.1 安裝英偉達的sdk10.1...

TensorFlow2 1張量排序

排序函式tf.sort 用法 tf.sort values,axis 1 direction ascending name none 引數說明 排序的座標tf.argsort 返回張量的索引,該張量給出沿軸的排序順序。用法 tf.argsort values,axis 1 direction asc...

tensorflow 2 1 自定義訓練

常常會遇到自定義網路結構的情況,自定結構後往往會有多個輸入,或者還需要自定義loss或者accuracy函式,那麼keras的fit就無法使用了,因此需要自定義訓練步驟 下面則自定義一次batch的訓練步驟,包含了計算loss,accuracy和梯度下降。tensorflow2.0 主推eager模...