1. 程式人生 > >卷積網路一些小知識點整理(tf)

卷積網路一些小知識點整理(tf)

1:定義卷積層的權重時候

def weight_variable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)

W_conv1 = weight_variable([5,5,1,32])

通俗說法:5*5的卷積來做運算,1代表的是處理的影象顏色通道只有1個,32指有32個卷積 即提取32個特徵

更通俗的說明:我們使用了32個filters,每一個都有一個大小為5*5的視窗。我們必須定義一個tensor來儲存shape為[5,5,1,32]權重矩陣W:前兩個引數是視窗的大小,第三個引數是channel的數量。最後一個定義了我們想使用多少個特徵

 

2:定義max_pooling層的時候

def max_pool_2x2(x):
    return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

tf.nn.max_pool(value, ksize, strides, padding, name=None)

引數是四個,和卷積很類似:

第一個引數value:需要池化的輸入,一般池化層接在卷積層後面,所以輸入通常是feature map,依然是[batch, height, width, channels]這樣的shape

第二個引數ksize:池化視窗的大小,取一個四維向量,一般是[1, height, width, 1],因為我們不想在batch和channels上做池化,所以這兩個維度設為了1

第三個引數strides:和卷積類似,視窗在每一個維度上滑動的步長,一般也是[1, stride,stride, 1]

第四個引數padding:和卷積類似,可以取'VALID' 或者'SAME'

返回一個Tensor,型別不變,shape仍然是[batch, height, width, channels]這種形式

3:每層和每層之間的權重設定關係

W_conv1 = weight_variable([5,5,1,32])

第一個卷積層中,每個size都是5*5,然後因為影象channel是1(mnist是灰色影象 不是RGB格式),32是指由32個卷積,形成32層深的一個輸出

因為上層有32個輸出,就相當於一幅影象是32個channel了,所以這塊第3個引數必須是32,64就代表有64個卷積

W_conv2 = weight_variable([5,5,32,64])

最後一層是全連線層的權重,7*7*64這應該是計算好了的,不是隨便寫,1024就說明全連線層輸出是1024個神經元,或者說是1024個特徵

W_fc1 = weight_variable([7*7*64, 1024])