CNN中全連線層是什麼樣的?
名稱:全連線。意思就是輸出層的神經元和輸入層的每個神經元都連線。
例子: AlexNet 網路中第一個全連線層是這樣的:
layer {
name: "fc6"
type: "InnerProduct"
bottom: "pool5"
top:"fc6"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
inner_product_param {
num_output: 4096
weight_filler {
type: "gaussian"
std: 0.005
}
bias_filler {
type: "constant"
value: 0.1
}
}
}
其中 bottom: "pool5"就是這個全連線層的輸入,而top:"fc6"就是這個全連線層的輸出。值得注意的地方是這個bottom: "pool5"是個“二維平面“式的資料,也就是N X M的陣列樣式,但是top:"fc6"確是一個K X 1或者 1 X K的向量,因此在實現中,程式會將bottom: "pool5"拉成N*M X 1或者1 X M*N的向量。
這個輸入向量是什麼呢?對,是特徵圖,符號化就是X(1)、X(2)、X(3)...X(N*M),括號內是X的下標。
那麼輸出呢?如果這個全連線層不是最後一個全連線層那麼它也是特徵圖,符號化就是Y(1)、Y(2)、Y(3)...Y(K),括號內是Y的下標。
那麼輸入和輸出是怎麼聯絡到一塊呢?答案就是W權重了,也叫濾波器,也叫卷積核。
那麼在全連線層裡怎麼沒看到這個濾波器的大小呢?答案是:不需要,因為它就是全連線啊。
一般情況下,輸入神經元的個數不等於輸出神經元的個數,那數目不等的輸入輸出神經元怎麼連線起來呢?還有,這個濾波器(卷積核)是什麼樣呢?可以看看下面例子:
其中(X1,X2,X3)就是輸入神經元(特徵圖),而(Y1Y2)就是輸出神經元(特徵圖),兩層之間的連線就是卷積核:,想想矩陣相乘,就明白1X3的“矩陣”怎麼變成1X2的矩陣了。
總的下來就是:,
這個卷積核的形狀是在程式碼中自動計算出來的。