卷積層:與傳統全連接層不同,卷積層中每一個節點的輸入只是上一層神經網絡的一小塊。(試圖將神經網絡中的每一小塊進行更加深入地分析從中得到抽象程度更高的特徵)
在卷積層中:1.過濾器(filter)處理的節點矩陣的長和寬由人工指定;2.處理得到的單位節點矩陣的深度--過濾器的深度;
(過濾器的尺寸是指過濾器輸入節點矩陣的大小;深度是指輸出單位節點矩陣的深度)
在卷積層結構中的前向傳播過程是通過一個過濾器從神經網絡當前層的左上角移動到右下角,並且計算每一個對應的單位矩陣而得到的。
卷積層中過濾器前向傳播過程實質就是爲通過左側小矩陣中的節點計算出右側單位矩陣中節點的過程。
filter_weight = tf.get_variable('weights', [5,5,3,16], initializer = tf.truncated_normal_initializer(stddev=0.1)) #創建過濾器的權重變量和偏執項變量,聲明一個 思維矩陣,前面倆維度代表過濾器的尺寸,第三 個維度表示當前層的深度,第四個維度表示過濾器的深度
biases = tf.get_variable('biases', [16], initializer= tf.constant_initializer(0.1))
conv = tf.nn.conv2d(input, filter_weight, strides=[1,1,1,1], padding='SAME')#第一個維度表示對應的輸入batch,第二個參數爲卷積層權重,第三個參數爲不同維度上的 步長,最後一個參數爲填充(SAME表示添加全爲0,VALID表示不添加)
bias=tf.nn.bias_add(conv, biases)#爲每一個節點加上偏執項,不能簡單實用加法進行偏執項,需要通過tf.nn.bias_add函數,
actived_conv=tf.nn.relu(bias)
卷積層前向傳播過程樣例
outL=[inLength/strideLength]
outW=[inWidth/strideWidth]
outL表示輸出層矩陣的長度,等於輸入層矩陣長度除以長度方向上的步長的向上取整值。
outW表示輸出層矩陣的寬度,等於輸入層矩陣寬度除以寬度方向上的步長的向上去整值。
在不使用全0填充的情況下:結果矩陣的大小爲:
outL=[(inL-filterL+1)/strideL]
outW=[(inW-filterL+1)/strideW)]
L表示長度,W表示寬度。