tf.concat(
[a,b]
,axis=n)
#拼接:不會會產生新的維度
'''e.g.:
a.shape = [4,32,8]
b.shape = [6,32,8]
axis = 0
=> concat.shape = [10,32,8]
'''#約束:非拼接維度之間必須保持一致,否則拼接不合法。
tf.stack(
[a,b]
,axis=n)
#堆疊:產生新的維度
'''e.g.:
a.shape = [32,8]
b.shape = [32,8]
axis = 0
=> stack.shape = [2,32,8]
'''#約束:所有待合併的shape完全一致,否則非法。
tf.split(x,num_or_size_splits,axis)
#分割:將乙個張量拆分為多個張量
''' x -> 待分割張量
num_or_size_splits -> 切割方案:為單個數值時:表示切割為等長的n份。當為list時:表示每份的長度
axis -> 分割的維度索引號
''''''
e.g.:
a.shape = [10,20,30]
return = tf.split(a,num_or_size_splits=10,axis=0)
return為len為10 的張量列表
return[0].shape = [1,20,30] 注意:切割後任然並保留了維度(維度為1)
'''#特別的,如果希望某個維度全部分割的長度都為1:tf.unstack(x,axis),但被切割的維度會消失,如[20,30]。
#範數:具體的計算請自查
tf.norm(x,
ord= n)
#n =1/2/np.inf,分別代表1範數 2範數 無窮範數
#最值、均值、和
#可計算某個維度的,也可計算全域性的
tf.reduce_max(a,axis = n)
tf.reduce_min(a,axis = n)
'''e.g.:
a.shape = [4,10]
retuen = tf.reduce_max(a,axis = 2)
return.shape = [4,]
'''#當不指定axis時,會計算全域性的元素對應的資料
tf.reduce
.mean(a,axis = n)
#均值tf.
reduce
.sum
(a,axis = n)
#求和tf,argmax(a , axis = n)
#最大值索引號
tf,argmin(a , axis = n)
#最小值索引號
#tip: tf.nn.softmax(out,axis=n)輸出轉化為概率
#兩張量是否一致
tf.equal(x,y)
#返回布林值型別的張量:每個元素一一對應
#填充(padding)一般為了保持兩張量維度一致,進行一些無意義的填充,填充0,
tf.padding(b,padding)
#padding引數包含多個巢狀方案的list,如[[0,0],[1,1],[1,2]]表示在第一維度不填充,第二維左側填充1個單元,在第二維度右側填充1個單元,在第三個維度左側填充1個單元,右側填充2個單元
'''e.g.:
a = [1,2,3,4,5,6]
b = [1,2,3,4]
return = tf.padding(b,[[0,2]])
return = [1,2,3,4,0,0]
'''#一般用於自然語言處理,對於不同單詞數的句子,對他們的張量長度進行統一,然後進行堆疊操作。
#也可用在填充當中
tf.maximum(x,2)
#x在[2,+inf)區間上
tf.minimum(x,0)
#(-inf,0]
tf.minimum(tf.maximum(x,2)
,7)#[2,7]
#更方便的
tf.clip_by_value(x,2,
7)#[2,7]
tf.gather(x,
[a,b]
,axis = n)
#根據索引號取出資料
#表示在維度為n上取出a到b上的資料(維度從1開始,實際上axis從0開始)
'''e.g.:
a.shape = [4,5,6]
r = tf.gather(a,[0,1],axis = 0)
r.shape = [2,5,6]
'''#事實上切片也可以實現,不過較為麻煩,gather適合索引號沒有規則的場景
tf.gather.nd(x,[[
],,]
)#通過指定座標,同時取樣多個點並且進行堆疊操作
tf.boolean_mask(a,mask,axis)
#通過指定維度,以掩碼的方式取樣資料
'''e.g.:
a.shape = [4,32,8]
r = tf.boolean_mask(a,mask=[true,false,false,true],axis=0)
r.shape = [2,32,8]
'''#注意:掩碼長度必須與對應的維度長度一致
#掩碼方式與gather_nd方式可以相互轉換
tf.where(cond,a,b)
#根據條件cond的真假,conda=true -> a , conda=false - > b
#當a,b不指定時,函式返回cond張量中所有為true的元素的索引座標
tf.where(cond)
tf.scatter_nd(indices,updates,shape)
#將資料update按照索引indices的位置,重新整理到形如shape的白板中
indices = tf.constant([[
4],[
3],[
1],[
7]])
updates = tf.constant(
[4.4
,3.3
,1.1
,5.5])
r = tf.scatter_nd(indices,updates,[8
])out : r.numpy(
)= array([0
.,1.1,0.
,3.3
,4.4,0
.,0.
,5.5
])
tf.linespace(star,end,num)
#在(star--end)區間內等間隔的生成num個數字,注意這裡的star和end必須是浮點型
tf.meshgrid(a,b)
#通過a的資料點,和b的資料點,返回a*b個資料點的張量[a,b,2],並切割為2個張量[a,b]、[a,b]
#功能就是 根據a和b生成網格點,用於繪製3d檢視,視覺化。
'''e.g.:
a = tf.linspace(-8,8,100)
b = tf.linspace(-8,8,100)
print(a.shape,b.shape)
out: (100,)
x,y = tf.meshgrid(a,b)
print(x.shape,y.shape)
out: (100, 100) (100, 100)
'''
dataset.shuffle(buffer_size)可將dataset物件隨機打散資料順序。buffer_size表緩衝池,一般乙個較大的常數。
***.batch(size)批訓練,數量為size
***.map(func) 預處理,自定義func函式,傳入即可。
for step,(x,y) in enumerate(train_db)
for x,y in train_db
TensorFlow函式使用總結
tf學習中,經常看到tensor.eval這樣的用法。tensor.eval 的意義和sess.run 一樣,t.eval 等效於sess.run t 但是二者也有些微區別,run可以同時執行多個tensor,比如 t tf.constant 11.0 u tf.constant 37.0 tu t...
Tensorflow卷積介面總結
這個介面用了這麼久,每次都有點迷惑,這裡做下總結。filter 卷積核引數,shape為 kernel height,kernel width,in channels,out channels 第三維與input的第四維對應,第四維決定了卷積核的個數 stride 步長,一維向量,4個值,其中 0 ...
TensorFlow實現高階的卷積神經網路
本人使用的資料集是cifar 10。這是乙個經典的資料集,許多 也都是在這個資料集上進行訓練。使用的卷積神經網路是根據alex描述的cuda convnet模型修改得來。在這個神經網路中,我使用了一些新的技巧 1 對weights進行了l2的正則化 2 將影象進行翻轉 隨機剪下等資料增強,製造了更多...