1. 程式人生 > >從零開始理解caffe網路的引數

從零開始理解caffe網路的引數

LeNet網路介紹

LeNet網路詳解

網路名稱

name: "LeNet"         # 網路(NET)名稱為LeNet

mnist層-train

layer {               # 定義一個層
  name: "mnist"       # 層名字mnist
  type: "Data"        # 層的型別,資料層
  top: "data"         # 層的輸出blob有兩個;data和label
  top: "label"        # blob是資料庫中用來儲存二進位制檔案的欄位型別
  include {
    phase: TRAIN      # 該層僅在訓練階段有效
} transform_param { scale: 0.00390625 # 資料變換使用的資料縮放因子 } data_param { # 資料層引數 source: "A:/Caffe/caffe/examples/mnist/mnist-train-leveldb" # 資料路徑 batch_size: 64 # 批量數目,一次讀取64張圖 backend: LEVELDB # 資料格式為LEVELDB } }

mnist層-test

layer {                # 同是名為mnist且輸出為data和label的資料層,只是定義的引數只在檢測階段有效
name: "mnist" type: "Data" top: "data" top: "label" include { phase: TEST } transform_param { scale: 0.00390625 } data_param { source: "A:/Caffe/caffe/examples/mnist/mnist-test-leveldb" batch_size: 1 backend: LEVELDB } }

卷積層1

# lr_mult: 學習率的係數,最終的學習率是這個數乘以solver.prototxt配置檔案中的base_lr。
# 如果有兩個lr_mult, 則第一個表示權值的學習率,第二個表示偏置項的學習率。一般偏置項的學習率是權值學習率的兩倍。 layer { # 定義了一個卷積層conv1 name: "conv1" type: "Convolution" bottom: "data" # 輸入blob為data top: "conv1" # 輸出blob為conv1 param { lr_mult: 1 # 全域性學習速率倍乘因子,1表示與全域性引數一致 } param { lr_mult: 2 # bias學習速率倍乘因子,是全域性引數的2倍 } convolution_param { # 卷積計算引數 num_output: 20 # 輸出feature map數量為20 kernel_size: 5 # 卷積核尺寸,5X5 stride: 1 # 卷積輸出跳躍間隔,1表示連續輸出,無跳躍 weight_filler { # 權值使用xavier填充器 type: "xavier" } bias_filler { type: "constant" # bias使用常數填充器,預設是0 } } }

下采樣層pool1

layer {                      # 下采樣層pol1,輸入conv1,輸出pool1
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX                # 最大值下采樣法
    kernel_size: 2           # 下采樣視窗尺寸2X2
    stride: 2                # 下采樣輸出跳躍間隔2X2
  }
}

卷積層2

layer {
  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"
    }
  }
}

下采樣層pool2

layer {
  name: "pool2"
  type: "Pooling"
  bottom: "conv2"
  top: "pool2"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}

全連線層1

layer {                        # 全連線層
  name: "ip1"
  type: "InnerProduct"
  bottom: "pool2"
  top: "ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 500            # 該層輸出引數 500X500
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}

採用ReLU的非線性層

layer {                         # 非線性層,用ReLU方法
  name: "relu1"
  type: "ReLU"
  bottom: "ip1"
  top: "ip1"
}

全連線層2

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"
    }
  }
}

accuracy層

layer {                        # 分類準確率層
  name: "accuracy"
  type: "Accuracy"
  bottom: "ip2"
  bottom: "label"
  top: "accuracy"
  include {
    phase: TEST
  }
}

損失層

layer {                      # 損失層
  name: "loss"
  type: "SoftmaxWithLoss" # 採用softmax迴歸
  bottom: "ip2"
  bottom: "label"
  top: "loss"
}

網路結構圖

LeNet網路結構

參考資料:《深度學習-21天實戰Caffe》

相關推薦

開始理解caffe網路引數

LeNet網路介紹 LeNet網路詳解 網路名稱 name: "LeNet" # 網路(NET)名稱為LeNet mnist層-train layer {

開始caffe(四):mnist手寫數字識別網路結構模型和超引數檔案的原始碼閱讀

下面為網路結構模型 %網路結構模型 name: "LeNet" #網路的名字"LeNet" layer { #定義一個層 name: "mnist" #層的名字"mnist" type:

開始系列-Caffe入門到精通之一 環境搭建

python 資源暫時不可用 強制 rec htm color 查看 cpu blog 先介紹下電腦軟硬件情況吧: 處理器:Intel? Core? i5-2450M CPU @ 2.50GHz × 4 內存:4G 操作系統:Ubuntu Kylin(優麒麟) 16.04

開始理解JAVA事件處理機制(2)

extend nds 接下來 htm ref param 簡單 tostring ansi 第一節中的示例過於簡單《從零開始理解JAVA事件處理機制(1)》,簡單到讓大家覺得這樣的代碼簡直毫無用處。但是沒辦法,我們要繼續寫這毫無用處的代碼,然後引出下一階段真正有益的代碼。

開始理解氣泡排序

氣泡排序是一種基礎的入門級別的演算法,它的效率比較低,但是理解它的好處是讓我們對演算法有初步的瞭解,理解了氣泡排序,不僅僅是讓我們寫出一個簡單演算法,完成入門,筆者認為寫出一段程式除了能夠給我們帶來收入以外,如果你能從寫的程式碼中感受到一絲快樂,這是一種精神享受。下面就讓我們開始理解氣泡排序演算法,

開始山寨Caffe·貳:主存模型

本文轉自:https://www.cnblogs.com/neopenx/p/5190282.html 從硬體說起 物理之觴 大部分Caffe原始碼解讀都喜歡跳過這部分,我不知道他們是什麼心態,因為這恰恰是最重要的一部分。 記憶體的管理不擅,不僅會導致程式的立即崩潰,還會導致記憶體的

開始caffe(七):利用GoogleNet實現影象識別

一、準備模型 在這裡,我們利用已經訓練好的Googlenet進行物體影象的識別,進入Googlenet的GitHub地址,進入models資料夾,選擇Googlenet 點選Googlenet的模型下載地址下載該模型到電腦中。 模型結構 在這裡,我們利用之前講

開始caffe(十):caffe中snashop的使用

在caffe的訓練期間,我們有時候會遇到一些不可控的以外導致訓練停止(如停電、裝置故障燈),我們就不得不重新開始訓練,這對於一些大型專案而言是非常致命的。在這裡,我們介紹一些caffe中的snashop。利用snashop我們就可以實現訓練的繼續進行。 在之前我們訓練得到的檔案中,我們發現

開始caffe(九):在Windows下實現影象識別

本系列文章主要介紹了在win10系統下caffe的安裝編譯,運用CPU和GPU完成簡單的小專案,文章之間具有一定延續性。 step1:準備資料集 資料集是進行深度學習的第一步,在這裡我們從以下五個連結中下載所需要的資料集: animal flower plane hou

開始caffe(八):Caffe在Windows環境下GPU版本的安裝

之前我們已經安裝過caffe的CPU版本,但是在MNIST手寫數字識別中,我們發現caffe的CPU版本執行速度較慢,訓練效率不高。因此,在這裡我們安裝了caffe的GPU版本,並使用GPU版本的caffe同樣對手寫MNIST數字集進行訓練。 step1: 安裝CUDA

開始caffe(二):caffe在win10下的安裝編譯

環境要求 作業系統:64位windows10 編譯環境:Visual Studio 2013 Ultimate版本 安裝流程 step1:檔案的下載 從GitHub新增連結描述中下載Windows版本的caffe,並進行解壓到電腦中。 step2:檔案修改 將壓縮包

開始搭建神經網路 (一) 基礎知識

1.什麼是人工神經網路    神經網路起源於對生物神經元的研究,如下圖所示生物神經元包括細胞體,樹突,軸突等部分。其中樹突是用於接受輸入資訊,輸入資訊經過突觸處理,當達到一定條件時通過軸突傳出,此時神經

開始山寨Caffe·柒:KV資料庫

你說你會關係資料庫?你說你會Hadoop? 忘掉它們吧,我們既不需要網路支援,也不需要複雜關係模式,只要讀寫夠快就行。                                         ——論資料儲存的本質 淺析資料庫技術 記憶體資料庫——STL的map容器 關係資料庫橫行已久,似乎大

開始山寨Caffe·玖:BlobFlow

聽說Google出了TensorFlow,那麼Caffe應該叫什麼?                           ——BlobFlow 神經網路時代的傳播資料結構 我的程式碼 我最早手寫神經網路的時候,Flow結構是這樣的: struct Data { vector<d

開始山寨Caffe·陸:IO系統(一)

你說你學過作業系統這門課?寫個無Bug的生產者和消費者模型試試!                               ——你真的學好了作業系統這門課嘛? 在第壹章,展示過這樣圖: 其中,左半部分構成了新版Caffe最惱人、最龐大的IO系統。 也是歷來最不重視的一部分。 第伍章又對左半

開始山寨Caffe·捌:IO系統(二)

生產者 雙緩衝組與訊號量機制 在第陸章中提到了,如何模擬,以及取代根本不存的Q.full()函式。 其本質是:除了為生產者提供一個成品緩衝佇列,還提供一個零件緩衝佇列。 當我們從外部給定了固定容量的零件之後,生產者的產能就受到了限制。 由兩個阻塞佇列組成的QueuePair,並不是Caffe的獨創,

開始山寨Caffe·伍:Protocol Buffer簡易指南

你為Class外訪問private物件而苦惱嘛?你為設計序列化格式而頭疼嘛?                             ——歡迎體驗Google Protocol Buffer 面向物件之封裝性 歷史遺留問題 面向物件中最矛盾的一個特性,就是“封裝性”。 在上古時期,大牛們無聊地設計了

開始山寨Caffe·拾貳:IO系統(四)

消費者 回憶:生產者提供產品的介面 在第捌章,IO系統(二)中,生產者DataReader提供了外部消費介面: class DataReader { public: ......... BlockingQueue<Datum*>& free() const

開始山寨Caffe·拾:IO系統(三)

資料變形 IO(二)中,我們已經將原始資料緩衝至Datum,Datum又存入了生產者緩衝區,不過,這離消費,還早得很呢。 在消費(使用)之前,最重要的一步,就是資料變形。 ImageNet ImageNet提供的資料相當Raw,不僅影象尺寸不一,ROI焦點內容比例也不一,如圖: [Krizhev

ubuntu 14.04 開始安裝caffe

一、前言 很多人不太喜歡看官方教程,但其實 caffe 的官方安裝指導做的非常好。我在看到 2) 之前,曾根據官方指導在 OSX 10.9, 10.10, Ubuntu 12.04, 14.04 下安裝過 10 多次不同版本的 caffe,都成功了。 本文有不少內容參考了 1)和 2),但又有一些內容