到目前爲止,我們訓好了模型,測試了模型,也知道如何看學習曲線,那麼就很好奇,通過怎麼個流程,能讓一幅圖片轉換成了一個結果(數字),接下來將一探究竟。
首先,需要明確的是我們訓練集是60000張32*32的圖片,測試集是10000張32*32的圖片。
第一層 卷積層(C1)
輸入:1*32*32
卷積核大小:5*5
feature map個數:20
輸出的feature map大小:28*28(32-5+1)
輸出:20*28*28
相應的配置文件代碼:
layer {
name: "conv1" //卷積神經網絡的第一層,卷積層
type: "Convolution" //這層操作爲卷積
bottom: "data" //層的輸入爲data
top: "conv1" //層的輸出爲conv1
param {
lr_mult: 1 //權值學習速率倍乘因子,1倍表示保持與全局參數一致
}
param {
lr_mult: 2 //bias學習倍率倍乘因子,是全局參數的2倍
}
convolution_param {
num_output: 20 //輸出特徵圖個數
kernel_size: 5 //卷積核大小
stride: 1 //卷積輸出跳躍間隔,1表示連續輸出
weight_filler { //權值使用xavier填充器
type: "xavier"
}
bias_filler { //bias使用常數填充器,默認爲0
type: "constant"
}
}
}
第二層 下采樣層(S2)
輸入:20*28*28
採樣區域:2*2
feature map個數:20
輸出的feature map大小:14*14(28/2)
輸出:20*14*14
相應的配置文件代碼:
layer {
name: "pool1"
type: "Pooling" //池化層,這一層的操作爲池化
bottom: "conv1" //層的輸入爲conv1
top: "pool1" //層的輸出爲pool1
pooling_param {
pool: MAX //最大池化
kernel_size: 2 //下采樣窗口尺寸2*2
stride: 2 //下采樣輸出跳躍間隔2*2
}
}
第三層 卷積層(C3)
輸入:20*14*14
卷積核大小:5*5
feature map個數:50
輸出的feature map大小:10*10(14-5+1)
輸出:50*10*10
相應的配置文件代碼:
layer { //新的卷積層,和conv1類似
name: "conv2"
type: "Convolution"
bottom: "pool1"
top: "conv2"
param {
lr_mult: 1
}
param {
lr_mult: 2
}
convolution_param {
num_output: 50
kernel_size: 5
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
第四層 下采樣層(S4)
輸入:50*10*10
採樣區域:2*2
feature map個數:50
輸出的feature map大小:5*5(10/2)
輸出:50*5*5
相應的配置文件代碼:
layer { //新的下采樣層,和pool1類似
name: "pool2"
type: "Pooling"
bottom: "conv2"
top: "pool2"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
第五層 全連接層(F5)
輸入:50*5*5
feature map個數:500
輸出的feature map大小:1*1
輸出:500*1*1
相應的配置文件代碼:
layer { //新的全連接層
name: "ip1"
type: "InnerProduct"
bottom: "pool2" //輸入爲pool2
top: "ip1" //輸出爲ip1
param {
lr_mult: 1
}
param {
lr_mult: 2
}
inner_product_param {
num_output: 500
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
第六層 RELU層(R6)
輸入:500*1*1
feature map個數:500
輸出的feature map大小:1*1
輸出:500*1*1
相應的配置文件代碼:
layer { //新的非線性層,用ReLU方法
name: "relu1"
type: "ReLU"
bottom: "ip1"
top: "ip1"
}
第七層 全連接層(F7)
輸入:500*1*1
feature map個數:10
輸出的feature map大小:1*1
輸出:10*1*1
注意:這層輸出是一個10行1列的數字,表示0-9的概率
相應的配置文件代碼:
layer {
name: "ip2"
type: "InnerProduct"
bottom: "ip1"
top: "ip2"
param {
lr_mult: 1
}
param {
lr_mult: 2
}
inner_product_param {
num_output: 10
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}