函式的作用是將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模...