日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Caffe基础介绍

發(fā)布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Caffe基础介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Caffe的全稱應該是Convolutional Architecture for Fast Feature Embedding,它是一個清晰、高效的深度學習框架,它是開源的,核心語言是C++,它支持命令行、Python和Matlab接口,它既可以在CPU上運行也可以在GPU上運行。它的license是BSD 2-Clause。

Deep Learning比較流行的一個原因,主要是因為它能夠自主地從數(shù)據(jù)上學到有用的feature。特別是對于一些不知道如何設計feature的場合,比如說圖像和speech。

Caffe的設計:基本上,Caffe follow了神經(jīng)網(wǎng)絡的一個簡單假設----所有的計算都是以layer的形式表示的layer做的事情就是take一些數(shù)據(jù),然后輸出一些計算以后的結(jié)果,比如說卷積,就是輸入一個圖像,然后和這一層的參數(shù)(filter)做卷積,然后輸出卷積的結(jié)果。每一個layer需要做兩個計算:forward是從輸入計算輸出,然后backward是從上面給的gradient來計算相對于輸入的gradient,只要這兩個函數(shù)實現(xiàn)了以后,我們就可以把很多層連接成一個網(wǎng)絡,這個網(wǎng)絡做的事情就是輸入我們的數(shù)據(jù)(圖像或者語音或者whatever),然后來計算我們需要的輸出(比如說識別的label),在training的時候,我們可以根據(jù)已有的label來計算loss和gradient,然后用gradient來update網(wǎng)絡的參數(shù),這個就是Caffe的一個基本流程。

基本上,最簡單地用Caffe上手的方法就是先把數(shù)據(jù)寫成Caffe的格式,然后設計一個網(wǎng)絡,然后用Caffe提供的solver來做優(yōu)化看效果如何,如果你的數(shù)據(jù)是圖像的話,可以從現(xiàn)有的網(wǎng)絡,比如說alexnet或者googlenet開始,然后做fine tuning,如果你的數(shù)據(jù)稍有不同,比如說是直接的float vector,你可能需要做一些custom的configuration,Caffe的logistic regression example興許會很有幫助。

Fine tune方法:fine tuning的想法就是說,在imagenet那么大的數(shù)據(jù)集上train好一個很牛的網(wǎng)絡了,那別的task上肯定也不錯,所以我們可以把pretrain的網(wǎng)絡拿過來,然后只重新train最后幾層,重新train的意思是說,比如我以前需要classify imagenet的一千類,現(xiàn)在我只想識別是狗還是貓,或者是不是車牌,于是我就可以把最后一層softmax從一個4096*1000的分類器變成一個4096*2的分類器,這個strategy在應用中非常好使,所以我們經(jīng)常會先在imagenet上pretrain一個網(wǎng)絡,因為我們知道imagenet上training的大概過程會怎么樣。

Caffe可以應用在視覺、語音識別、機器人、神經(jīng)科學和天文學。

Caffe提供了一個完整的工具包,用來訓練、測試、微調(diào)和部署模型。

Caffe的亮點

(1)、模塊化:Caffe從一開始就設計得盡可能模塊化,允許對新數(shù)據(jù)格式、網(wǎng)絡層和損失函數(shù)進行擴展。

(2)、表示和實現(xiàn)分離:Caffe的模型(model)定義是用Protocol Buffer語言寫進配置文件的。以任意有向無環(huán)圖的形式,Caffe支持網(wǎng)絡架構(gòu)。Caffe會根據(jù)網(wǎng)絡的需要來正確占用內(nèi)存。通過一個函數(shù)調(diào)用,實現(xiàn)CPU和GPU之間的切換。

(3)、測試覆蓋:在Caffe中,每一個單一的模塊都對應一個測試。

(4)、Python和Matlab接口:同時提供Python和Matlab接口。

(5)、預訓練參考模型:針對視覺項目,Caffe提供了一些參考模型,這些模型僅應用在學術和非商業(yè)領域,它們的license不是BSD。

Caffe架構(gòu)

(1)、數(shù)據(jù)存儲:Caffe通過”blobs”即以4維數(shù)組的方式存儲和傳遞數(shù)據(jù)。Blobs提供了一個統(tǒng)一的內(nèi)存接口,用于批量圖像(或其它數(shù)據(jù))的操作,參數(shù)或參數(shù)更新。Models是以Google Protocol Buffers的方式存儲在磁盤上。大型數(shù)據(jù)存儲在LevelDB數(shù)據(jù)庫中。

(2)、層:一個Caffe層(Layer)是一個神經(jīng)網(wǎng)絡層的本質(zhì),它采用一個或多個blobs作為輸入,并產(chǎn)生一個或多個blobs作為輸出。網(wǎng)絡作為一個整體的操作,層有兩個關鍵職責:前向傳播,需要輸入并產(chǎn)生輸出;反向傳播,取梯度作為輸出,通過參數(shù)和輸入計算梯度。Caffe提供了一套完整的層類型。

(3)、網(wǎng)絡和運行方式:Caffe保留所有的有向無環(huán)層圖,確保正確的進行前向傳播和反向傳播。Caffe模型是終端到終端的機器學習系統(tǒng)。一個典型的網(wǎng)絡開始于數(shù)據(jù)層,結(jié)束于loss層。通過一個單一的開關,使其網(wǎng)絡運行在CPU或GPU上。在CPU或GPU上,層會產(chǎn)生相同的結(jié)果。

(4)、訓練一個網(wǎng)絡:Caffe訓練一個模型(Model)靠快速、標準的隨機梯度下降算法。

在Caffe中,微調(diào)(Fine tuning),是一個標準的方法,它適應于存在的模型、新的架構(gòu)或數(shù)據(jù)。對于新任務,Caffe 微調(diào)舊的模型權(quán)重并按照需要初始化新的權(quán)重。

Blobs,Layers,and Nets:深度網(wǎng)絡的組成模式表示為數(shù)據(jù)塊工作的內(nèi)部連接層的集合。以它自己的model模式,Caffe定義了層層(layer-by-layer)網(wǎng)絡。Caffe網(wǎng)絡定義了從低端到頂層整個model,從輸入數(shù)據(jù)到loss層。隨著數(shù)據(jù)通過網(wǎng)絡的前向傳播和反向傳播,Caffe存儲、通信、信息操作作為Blobs。Blob是標準陣列和統(tǒng)一內(nèi)存接口框架。Blob用來存儲數(shù)據(jù)、參數(shù)以及l(fā)oss。隨之而來的layer作為model和計算的基礎,它是網(wǎng)絡的基本單元。net作為layer的連接和集合,網(wǎng)絡的搭建。blob詳細描述了layer與layer或net是怎樣進行信息存儲和通信的。Solver是Net的求解。

Blob 存儲和傳輸:一個blob是對要處理的實際數(shù)據(jù)的封裝,它通過Caffe傳遞。在CPU和GPU之間,blob也提供同步能力。在數(shù)學上,blob是存儲連續(xù)的N維數(shù)組陣列。

Caffe通過blobs存儲和傳輸數(shù)據(jù)。blobs提供統(tǒng)一的內(nèi)存接口保存數(shù)據(jù),例如,批量圖像,model參數(shù),導數(shù)的優(yōu)化。

Blobs隱藏了計算和混合CPU/GPU的操作根據(jù)需要從主機CPU到設備GPU進行同步的開銷。主機和設備的內(nèi)存是按需分配。

對于批量圖像數(shù)據(jù),blob常規(guī)容量是圖像數(shù)N*通道數(shù)K*圖像高H*圖像寬W。在布局上,Blob存儲以行為主,因此最后/最右邊的維度改變最快。例如,在一個4D blob中,索引(n, k, h, w)的值物理位置索引是((n * K + k) * H + h) * W + w。對于非圖像應用,用blobs也是有效的,如用2D blobs。

參數(shù)blob尺寸根據(jù)當前層的類型和配置而變化。

一個blob存儲兩塊內(nèi)存,data和diff,前者是前向傳播的正常數(shù)據(jù),后者是通過網(wǎng)絡計算的梯度。

一個blob使用SyncedMem類同步CPU和GPU之間的值,為了隱藏同步的詳細信息和盡量最小的數(shù)據(jù)傳輸。

Layer計算和連接:Layer是模型(model)的本質(zhì)和計算的基本單元。Layer卷積濾波、pool、取內(nèi)積、應用非線性、sigmoid和其它元素轉(zhuǎn)換、歸一化、載入數(shù)據(jù),計算losses.

每一個layer類型定義了三個至關重要的計算:設置、前向和反向。(1)、設置:初始化這個layer及在model初始化時連接一次;(2)、前向:從底部對于給定的輸入數(shù)據(jù)計算輸出并傳送到頂端;(3)、反向:對于給定的梯度,頂端輸出計算這個梯度到輸入并傳送到低端。

有兩個前向(forward)和反向(backward)函數(shù)執(zhí)行,一個用于CPU,一個用于GPU。

Caffe layer的定義由兩部分組成,層屬性和層參數(shù)。

每個layer有輸入一些’bottom’blobs,輸出一些’top’ blobs.

Net定義和操作:net由組成和分化共同定義了一個函數(shù)和它的梯度。每一層輸出計算函數(shù)來完成給定的任務,每一層反向從學習任務中通過loss計算梯度.Caffe model是終端到終端的機器學習引擎。

Net是layers組成的有向無環(huán)圖(DAG)。一個典型的net開始于數(shù)據(jù)層,此layer從磁盤加載數(shù)據(jù),終止于loss層,此layer計算目標任務,如分類和重建。

Model初始化通過Net::Init()進行處理。初始化主要做了兩件事:通過創(chuàng)建blobs和layers來構(gòu)建整個DAG,調(diào)用layers的SetUp()函數(shù)。它也做了一系列的其它bookkeeping(簿記)的事情,比如驗證整個網(wǎng)絡架構(gòu)的正確性。

Model格式:The models are defined in plaintext protocol buffer schema(prototxt) while the learned models are serialized as binary protocol buffer(binaryproto) .caffemodel files. The model format is defined by the protobufschema in caffe.proto.

Forward and Backward:Forward inference, Backward learning.

Solver優(yōu)化一個model通過首先調(diào)用forward得到輸出和loss,然后調(diào)用backward生成model的梯度,接著合并梯度到權(quán)值(weight)更新盡量減少loss.Solver, Net和Layer之間的分工,使Caffe保持模塊化和開放式發(fā)展。

Loss:在Caffe中,作為大多數(shù)機器學習,學習(learning)是通過loss函數(shù)(error, cost, or objective函數(shù))來驅(qū)動。一個loss函數(shù)指定了學習的目標通過映射參數(shù)設置(例如,當前的網(wǎng)絡權(quán)值)到一個標量值。因此,學習的目標是找到最小化loss函數(shù)權(quán)值的設置。

在Caffe中,loss是由網(wǎng)絡的forward計算。每一個layer采用一組輸入blobs(bottom,表示輸入),并產(chǎn)生一組輸出blobs(top,表示輸出)。一些layer的輸出可能會用在loss函數(shù)中。對于分類任務,一個典型的loss函數(shù)選擇是SoftmaxWithLoss函數(shù)。

Loss weights:net通過許多個layers產(chǎn)生一個loss,loss weights能被用于指定它們的相對重要性。

按照慣例,帶有”loss”后綴的Caffe layer類型應用于loss函數(shù),但其它layers是被假定為純碎用于中間計算。然而,任一個layer都能被用于loss,通過添加一個”loss_weight”字段到一個layer定義。

在Caffe中,最后的loss是被計算通過所有的weighted loss加和通過網(wǎng)絡。

Solver:Solver通過協(xié)調(diào)網(wǎng)絡的前向推理和后向梯度形成參數(shù)更新試圖改善loss達到model優(yōu)化。Learning的職責是被劃分為Solver監(jiān)督優(yōu)化和產(chǎn)生參數(shù)更新,Net產(chǎn)生loss和梯度。

Caffe solver方法:隨機梯度下降(Stochastic Gradient Descent, type:”SGD”);AdaDelta(type:”AdaDelta”);自適應梯度(Adaptive Gradient,type:”AdaGrad”);Adam(type:”Adam”);Nesterov’s Accelerated Gradient(type:”Nesterov”);RMSprop(type:”RMSProp”).

Solver作用:Solver是Net的求解.(1)、優(yōu)化bookkeeping、創(chuàng)建learning訓練網(wǎng)絡、對網(wǎng)絡進行評估;(2)、調(diào)用forward/backward迭代優(yōu)化和更新參數(shù);(3)、定期評估測試網(wǎng)絡;(4)、整個優(yōu)化快照model和solver狀態(tài)。

Solver的每一次迭代執(zhí)行:(1)、調(diào)用網(wǎng)絡forward計算輸出和loss;(2)、調(diào)用網(wǎng)絡backward計算梯度;(3)、按照solver方法,采用漸變進行參數(shù)更新;(4)、按照學習率、歷史和方法更新solver狀態(tài)。通過以上執(zhí)行來獲得所有的weights從初始化到learned model.

像Caffe models,Caffe solvers也可以在CPU或GPU模式下運行。

solver方法處理最小化loss的總體優(yōu)化問題。

實際的weight更新是由solver產(chǎn)生,然后應用到net參數(shù)。

Layer Catalogue:為了創(chuàng)建一個Caffe model,你需要定義model架構(gòu)在一個prototxt文件(protocol buffer definition file)中。Caffe layers和它們的參數(shù)是被定義在protocol buffer definitions文件中,對于Caffe工程是caffe.proto.

Vision Layers:Vision layers通常以圖像作為輸入,并產(chǎn)生其它圖像作為輸出:

(1)、Convolution(Convolution):卷積層通過將輸入圖像與一系列可學習的濾波進行卷積,在輸出圖像中,每一個產(chǎn)生一個特征圖;(2)、Pooling(Pooling);(3)、Local Response Normalization(LRN);(4)、im2col。

Loss Layers:Loss驅(qū)動學習通過比較一個輸出對應一個目標和分配成本到最小化。Loss本身是被計算通過前向傳輸,梯度到loss是被計算通過后向傳輸:

(1)、Softmax(SoftmaxWithLoss);(2)、Sum-of-Squares/Euclidean(EuclideanLoss);(3)、Hinge/Margin(HingeLoss);(4)、SigmoidCross-Entropy(SigmoidCrossEntropyLoss);(5)、Infogain(InfogainLoss);(6)、Accuracy andTop-k。

Activation/NeuronLayers:一般Activation/Neuron Layers是逐元素操作,輸入一個bottom blob,產(chǎn)生一個同樣大小的top blob:

(1)、ReLU/Rectified-Linearand Leaky-ReLU(ReLU);(2)、Sigmoid(Sigmoid);(3)、TanH/Hyperbolic Tangent(TanH);(4)、Absolute Value(AbsVal);(5)、Power(Power);(6)、BNLL(BNLL)。

Data Layers:數(shù)據(jù)輸入Caffe通過Data Layers,它們在網(wǎng)絡的低端。數(shù)據(jù)可以來自于:高效的數(shù)據(jù)庫(LevelDB或LMDB)、直接來自內(nèi)存、在不注重效率的情況下,也可以來自文件,磁盤上HDF5數(shù)據(jù)格式或普通的圖像格式:

(1)、Database(Data);(2)、In-Memory(MemoryData);(3)、HDF5Input(HDF5Data);(4)、HDF5 Output(HDF5Output);(5)、Images(ImageData);(6)、Windows(WindowData);(7)、Dummy(DummyData).

Common Layers:(1)、InnerProduct(InnerProduct);(2)、Splitting(Split);(3)、Flattening(Flatten);(4)、Reshape(Reshape);(5)、Concatenation(Concat);(6)、Slicing(Slice);(7)、Elementwise Operations(Eltwise);(8)、Argmax(ArgMax);(9)、Softmax(Softmax);(10)、Mean-VarianceNormalization(MVN)。

Data:在Caffe中,數(shù)據(jù)存儲在Blobs中。Data Layers加載輸入和保存輸出通過轉(zhuǎn)換從blob到其它格式。普通的轉(zhuǎn)換像mean-subtraction和feature-scaling是通過配置data layer來完成。新的輸入類型需要開發(fā)一個新的data layer來支持。

?

以上內(nèi)容來自于Caffe官方網(wǎng)站的翻譯和一些網(wǎng)絡blog的整理,主要參考:

1.??????《Caffe: Convolutional Architecture for Fast Feature Embedding》

2.??????http://caffe.berkeleyvision.org/tutorial/

3.??????http://suanfazu.com/t/caffe/281/3

4.??????http://mp.weixin.qq.com/s?__biz=MzAxNTE2MjcxNw==&mid=206508839&idx=1&sn=4dea40d781716da2f56d93fe23c158ab#rd

5.??????https://yufeigan.github.io/


關于Caffe在Windows上的配置可以參考:?http://blog.csdn.net/fengbingchun/article/details/50987353

GitHub:?https://github.com/fengbingchun/Caffe_Test?

總結(jié)

以上是生活随笔為你收集整理的Caffe基础介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉(zhuǎn)載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:Caffe基础介绍