tf卷積基礎

2021-08-28 01:17:40 字數 3702 閱讀 5047

**

slim模組的conv2d函式,是二維卷積介面,順著源**可以看到最終調的tensorflow介面是convolution,這個地方就進入c++層面了,暫時不涉及。先來看看這個convolution函式,官方定義是這樣的:

tf.nn.convolution(

input,

filter,

padding,

strides=none,

dilation_rate=none,

name=none,

data_format=none

)

一般情況下,也就是data_format=none的時候,input的要求格式是[batch_size] + input_spatial_shape + [in_channels], 也就是要求第一維是batch,最後一維是channel,中間是真正的卷積維度。所以這個介面不僅只支援2維卷積,猜測2維卷積tf.nn.conv2d是對此介面的封裝。[batch, height, weight, channel]就是conv2d的input引數格式,batch就是樣本數,或者更狹隘一點,數量,height是高,weight是的寬,slim的分類網路都是height=weight的,以實現方陣運算,所有slim模組中的原始都需要經過預處理過程,這裡不展開。

filter引數是卷積核的定義,spatial_filter_shape + [in_channels, out_channels],對於2維卷積同樣是4維引數[weight, height, channel, out_channel]

例子1:單通道單卷積核

import tensorflow as tf

input = tf.constant(

[ [

[[100.],

[70.],

[40.]],[

[90.],

[60.],

[30.]],[

[80.],

[50.],

[20.]

]]])

#定義乙個2x2x1x1的卷積核

filter = tf.constant(

[ [

[[0.5]],[

[0.2]]],

[[[0.1]],[

[0.3]

]]])

#即卷積核為: [0.5,0.1]

# [0.2,0.3]

result = tf.nn.convolution(input, filter, padding='valid');

with tf.session() as sess:

print sess.run(result)

即輸入為:

[100,90,80]

[70,60,50]

[40,30,20]

卷積結果

[91,80]

[58,47]

例子2:三通道單卷積核

import tensorflow as tf

input = tf.constant(

[ [

[[100., 100., 20.],

[100., 100., 100.],

[100., 100., 100.]],[

[60., 100., 100.],

[100., 100., 100.],

[100., 100., 100.]],[

[20., 100., 100.],

[100., 100., 100.],

[100., 100., 100.],

]]])

#定義2x2x3x1的卷積核(3為通道數,1為輸出特徵圖數)

filter = tf.constant(

[ [

[[0.5],

[0.5],

[0.5]],[

[0.1],

[0.5],

[0.5]]],

[[[0.2],

[0.5],

[0.5]],[

[0.3],

[0.5],

[0.5]

]],]);

result = tf.nn.convolution(input, filter, padding='valid');

with tf.session() as sess:

print sess.run(result)

」』 即三通道為:

[100,60,20] 。。 [100,100,100] 。 [20,100,100]

[100,100,100] 。 [100,100,100] 。 [100,100,100]

[100,100,100] 。 [100,100,100] 。 [100,100,100]

」』 對應通道的卷積核為:

[0.5,0.2] ….[0.5,0.5] ….[0.5,0.5]

[0.1,0.3] ….[0.5,0.5] ….[0.5,0.5]

結果:

[462.474]

[510.510]

例子3:三通道2個卷積核

#定義乙個1x3x3x3的

input = tf.constant(

[ [

[[100., 100., 20.],

[100., 100., 100.],

[100., 100., 100.]],[

[60., 100., 100.],

[100., 100., 100.],

[100., 100., 100.]],[

[20., 100., 100.],

[100., 100., 100.],

[100., 100., 100.],

]]])

#定義2x2x3x2的卷積核

filter2 = tf.constant(

[ [

[[0.5, 0.2],

[0.5, 0.1],

[0.5, 0.1]],[

[0.4, 0.4],

[0.5, 0.2],

[0.5, 0.1]]],

[[[0.3, 0.3],

[0.5, 0.1],

[0.5, 0.1]],[

[0.2, 0.1],

[0.5, 0.1],

[0.5, 0.1]]],

])

卷積核為:

[0.5,0.2] ….[0.5,0.5] ….[0.5,0.5]

[0.1,0.3] ….[0.5,0.5] ….[0.5,0.5]

[0.2,0.3] ….[0.1,0.1] ….[0.10.1]

[0.4,0.1 ….[0.2,0.1] ….[0.1,0.1]

結果:

[462,474]

[510,510]

[170,158]

[190,190]

tf基礎操作

在tf中,圖表示計算任務。圖中節點被稱為operation 簡稱op op接受tensor,執行計算,產生tensor。tensor是多維陣列。為了進行計算,圖必須在會話裡被啟動。會話將圖的op分發到cpu之類的裝置上,同時提供執行op的方法,執行後,返回tensor結果。tf程式通常被組織成乙個構...

tf基礎知識

1 基本概念 圖 graph 圖描述了計算的過程,tensorflow使用圖來表示計算任務。張量 tensor tensorflow使用tensor表示資料。每個tensor是乙個型別化的多維陣列。操作 op 圖中的節點被稱為op opearation的縮寫 乙個op獲得0個或多個tensor,執行...

tf 矩陣行和列交換 tf矩陣基礎

一 placeholder tensorflow的設計理念稱之為計算流圖,在編寫程式時,首先構築整個系統的graph,並不會直接生效,這一點和python的其他數值計算庫 如numpy等 不同,graph為靜態的,類似於docker中的映象。然後,在實際的執行時,啟動乙個session,程式才會真正...