一 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高階程式設計的重點知識從頭梳理一遍。特此記錄一下自己學習的一些自認為比較重要的筆記。看似最難走的路,...