Caffe中的基本概念

2021-09-12 07:32:56 字數 2900 閱讀 9805

一 caffe模組包括四個部分

blob:caffe中資料的封裝,用於layer上流動:

blob四維連續陣列,通常表示為(n,k,w,h),是基礎的資料結構。可表示輸入輸出資料,也可表示引數資料     

2. layer:輸入層,輸出層,神經網路層的抽象

layer網路基本單元,每一層定義了三種運算:初始化網路引數,前向傳播,後向傳播

3.net:神經網路結構,將layer層疊關聯起來

net為無迴路有向圖

初始化函式:建立blobs和layers;呼叫layers的setup函式來初始化layers

forward和backward

4.solver:定義神經網路訓練和測試引數

建立訓練網路和測試網路

週期性的測試網路

呼叫前向和反向函式進行的迭代優化和引數更新

solver每輪迭代都會通過前向函式計算輸出和損失(loss),還用反向傳播來計算梯度

二 caffe model

用於儲存和恢復網路引數,字尾為.caffemodel

solver儲存和恢復執行狀態,字尾為.solverstate

三 caffe環境配置

四 caffe原始碼解讀

1.資料夾結構說明

docs:幫助文件

examples:一些**樣例

matlab:matlab介面檔案

python:python介面檔案

model:一些配置好的模型引數

scripts:一些文件和資料用到的指令碼

2.核心**資料夾:

tools:儲存的原始碼是用於生成二進位制處理程式的,也是我們直接使用命令列訓練時候的工具

include:caffe的標頭檔案.hpp,命名方式一般為網路名字開頭

src:caffe的原始檔:.cpp,.cu。其中.cpp檔案對應到了cpu版本的**,.cu檔案對應到了gpu版本的**

3.src/caffe核心原始碼結構

test:用gtest測試caffe的原始碼

util:資料轉換時用的一些**

proto:是一種資料儲存格式,幫助caffe提速,注意,我們在新增網路的時候,需要在這個檔案中新增相應的配置,除此之外,                 還需要新增相應的.hpp和.cpp檔案到include和src中

layers:定義並實現了網路的前向,反向等方法

solvers:定義並實現了一系列優化方法,如sgd,adam等

五 caffe配置檔案介紹

solver.prototxt:配置模型訓練的超引數:

net := 指定待訓練模型結構檔案,若沒有明確指定訓練和測試網路,即train_val.prototxt

test_interval := 測試間隔

test_iteration := 測試時進行的迭代次數,等於測試集容量/測試網路的batch size

base_lr := 基本學習率

lr_policy := 學習率變更策略

gamma := 學習率變更策略需要用到的引數

power :=  學習率變更策略需要用到的引數

stepsize := 學習率變更策略step的變更步長(固定步長)

stepvalue := 學習率變更策略multistep的變更步長(可變步長)

max_iter := 模型訓練的最大迭代次數

momentum := 動量,是優化策略(adam,sgd,...)用到的引數,如果我們不採用相應的優化策略,這個引數就不用配置

momentum2 := 優化策略adam用到的引數

weight_decay := 權重衰減率

display := 每隔幾次迭代顯示一次結果

snapshot := 快照,每隔幾次儲存一次模型引數

snapshot_prefix := 儲存模型檔案的字首,可以是路徑

type := solver優化策略,即sgd,adam等

solve_mode := 指定訓練模式,即cpu/gpu

device_id := 指定裝置號(使用gpu模式),預設為0

train_val.prototxt:訓練網路

訓練時通常將訓練網路,測試網路定義為train_val.prototxt或分開定義為train.prototxt和test.prototxt

例如

name:"lenet"

layer

transform_param

data_param

deploy.prorotxt:測試網路

在網路訓練完成時,往往通過deploy.prorotxt檔案進行網路測試

deploy.prorotxt和train_val.prototxt的主要區別在於:

1. deploy.prorotxt沒有反向傳播部分,因而沒有loss層

2. deploy.prorotxt會去掉資料層,只需告訴輸入的資料維度

3.deploy.prorotxt中將bn層的use_global_stats設定為true

deploy.prorotxt有以下兩種定義方式:

第一種:

layer}
第二種:

input:"data"

input_shape

六 深度學習標準層在caffe中定義

資料輸入層:data,imagedata,memorydata等

視覺層:包括convolution,pooling,bn,lrn,im2col等

啟用層:relu,sigmoid等

損失層:softmax_loss,euclidean等

迴圈層:rnn, lstm等

工具層:reshape,concat,flatten,slice等

layer

基本概念 C 基本概念

由於工作中需要用到c 編寫的一些工具,有時候需要根據需求修改或者定製工具,所以現在不得不學習一下c 的基礎語法,此為筆記,不成章法!機器語言 組合語言 高階語言 面向過程的程式設計方法 物件導向的程式設計方法 泛型程式設計方法 1 演算法設計 2 源程式編輯 3 編譯 4 連線 5 執行除錯 輸入裝...

Eclipse中的基本概念

eclipse中的基本概念 1 display 應用程式一般只需要乙個display物件,該物件實際上是乙個swt物件,代表了底層圖形系統的實現。display的主要任務是事件處理,它負責從作業系統的事件佇列中讀取事件,傳遞給rcp的事件 以便完成具體的任務。需要注意的是,display物件不代表應...

Js中的基本概念

前言 剛畢業的應屆生,學習前端時間並不長,昨天參加面試,一輪筆試,兩輪技術面試。尤其在技術面試的時候感覺到自己基礎知識還是搞的有些亂,也突然明白到了乙個紮實的js基礎對於之後的路是有多重要。準備把js高階程式設計的重點知識從頭梳理一遍。特此記錄一下自己學習的一些自認為比較重要的筆記。看似最難走的路,...