DeepLearning(基於caffe)實戰項目(6)--探索leNet模型的真諦

        到目前爲止,我們訓好了模型,測試了模型,也知道如何看學習曲線,那麼就很好奇,通過怎麼個流程,能讓一幅圖片轉換成了一個結果(數字),接下來將一探究竟

        首先,需要明確的是我們訓練集是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"
    }
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章