精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深度學習框架Caffe源碼解析

大數據
以上為Caffe代碼架構的一個總體介紹,希望能借此幫助社區的小伙伴找到打開定制化Caffe大門的鑰匙。本文作者希望借此拋磚引玉,與更多期望了解Caffe和深度學習框架底層實現的同行交流。

相信社區中很多小伙伴和我一樣使用了很長時間的Caffe深度學習框架,也非常希望從代碼層次理解Caffe的實現從而實現新功能的定制。本文將從整體架構和底層實現的視角,對Caffe源碼進行解析。

Caffe總體架構

Caffe框架主要有五個組件,Blob,Solver,Net,Layer,Proto,其結構圖如下圖1所示。Solver負責深度網絡的訓練,每個Solver中包含一個訓練網絡對象和一個測試網絡對象。每個網絡則由若干個Layer構成。每個Layer的輸入和輸出Feature map表示為Input Blob和Output Blob。Blob是Caffe實際存儲數據的結構,是一個不定維的矩陣,在Caffe中一般用來表示一個拉直的四維矩陣,四個維度分別對應Batch Size(N),Feature Map的通道數(C),Feature Map高度(H)和寬度(W)。Proto則基于Google的Protobuf開源項目,是一種類似XML的數據交換格式,用戶只需要按格式定義對象的數據成員,可以在多種語言中實現對象的序列化與反序列化,在Caffe中用于網絡模型的結構定義、存儲和讀取。

圖1 Caffe源碼總體架構圖

Blob解析

下面介紹Caffe中的基本數據存儲類Blob。Blob使用SyncedMemory類進行數據存儲,數據成員 data_指向實際存儲數據的內存或顯存塊,shape_存儲了當前blob的維度信息,diff_這個保存了反向傳遞時候的梯度信息。在Blob中其實不是只有num,channel,height,width這種四維形式,它是一個不定維度的數據結構,將數據展開存儲,而維度單獨存在一個vector 類型的shape_變量中,這樣每個維度都可以任意變化。

來一起看看Blob的關鍵函數,data_at這個函數可以讀取的存儲在此類中的數據,diff_at可以用來讀取反向傳回來的誤差。順便給個提示,盡量使用data_at(const vector& index)來查找數據。Reshape函數可以修改blob的存儲大小,count用來返回存儲數據的數量。BlobProto類負責了將Blob數據進行打包序列化到Caffe的模型中。

工廠模式說明

接下來介紹一種設計模式Factory Pattern,Caffe 中Solver和Layer對象的創建均使用了此模式,首先看工廠模式的UML的類圖:

圖2 工廠模式UML類圖

如同Factory生成同一功能但是不同型號產品一樣,這些產品實現了同樣Operation,很多人看了工廠模式的代碼,會產生這樣的疑問為何不new一個出來呢,這樣new一個出來似乎也沒什么問題吧。試想如下情況,由于代碼重構類的名稱改了,或者構造函數參數變化(增加或減少參數)。而你代碼中又有N處new了這個類。如果你又沒用工廠,就只能一個一個找來改。工廠模式的作用就是讓使用者減少對產品本身的了解,降低使用難度。如果用工廠,只需要修改工廠類的創建具體對象方法的實現,而其他代碼不會受到影響。

舉個例子,寫代碼少不得餓了要加班去吃夜宵,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory。

Solver解析

接下來切回正題,我們看看Solver這個優化對象在Caffe中是如何實現的。SolverRegistry這個類就是我們看到的上面的factory類,負責給我們一個優化算法的產品,外部只需要把數據和網絡結構定義好,它就可以自己優化了。

Solver* CreateSolver(const SolverParameter& param)這個函數就是工廠模式下的CreateProduct的操作, Caffe中這個SolverRegistry工廠類可以提供給我們6種產品(優化算法):

這六種產品的功能都是實現網絡的參數更新,只是實現方式不一樣。那我們來看看他們的使用流程吧。當然這些產品類似上面Product類中的Operation,每一個Solver都會繼承Solve和Step函數,而每個Solver中獨有的僅僅是ApplyUpdate這個函數里面執行的內容不一樣,接口是一致的,這也和我們之前說的工廠生產出來的產品一樣功能一樣,細節上有差異,比如大多數電飯煲都有煮飯的功能,但是每一種電飯煲煮飯的加熱方式可能不同,有底盤加熱的還有立體加熱的等。接下里我們看看Solver中的關鍵函數。

Solver中Solve函數的流程圖如下:

圖3 Solver類Solve方法流程圖

Solver類中Step函數流程圖:

圖4 Solver類Step方法流程圖

Solver中關鍵的就是調用Sovle函數和Step函數的流程,你只需要對照Solver類中兩個函數的具體實現,看懂上面兩個流程圖就可以理解Caffe訓練執行的過程了。

Net類解析

分析過Solver之后我們來分析下Net類的一些關鍵操作。這個是我們使用Proto創建出來的深度網絡對象,這個類負責了深度網絡的前向和反向傳遞。以下是Net類的初始化方法NetInit函數調用流程:

圖5 Net類NetInit方法流程圖

Net的類中的關鍵函數簡單剖析

• ForwardBackward:按順序調用了Forward和Backward。

• ForwardFromTo(int start, int end):執行從start層到end層的前向傳遞,采用簡單的for循環調用。

• BackwardFromTo(int start, int end):和前面的ForwardFromTo函數類似,調用從start層到end層的反向傳遞。

• ToProto函數完成網絡的序列化到文件,循環調用了每個層的ToProto函數。

Layer解析

Layer是Net的基本組成單元,例如一個卷積層或一個Pooling層。本小節將介紹Layer類的實現。

Layer的繼承結構

圖6 Layer層的繼承結構

Layer的創建

與Solver的創建方式很像,Layer的創建使用的也是工廠模式,這里簡單說明下幾個宏函數:

REGISTER_LAYER_CREATOR負責將創建層的函數放入LayerRegistry。

我們來看看大多數層創建的函數的生成宏REGISTER_LAYER_CLASS,可以看到宏函數比較簡單的,將類型作為函數名稱的一部分,這樣就可以產生出一個創建函數,并將創建函數放入LayerRegistry。

REGISTER_LAYER_CREATOR(type, Creator_##type##Layer)

這段代碼在split_layer.cpp文件中

REGISTER_LAYER_CLASS(Split)。

這樣我們將type替換過以后給大家做個范例,參考下面的代碼。

當然這里的創建函數好像是直接調用,沒有涉及到我們之前工廠模式的一些問題。所有的層的類都是這樣嗎?當然不是,我們仔細觀察卷積類。

卷積層怎么沒有創建函數呢,當然不是,卷積的層的創建函數在LayerFactory.cpp中,截圖給大家看下,具體代碼如下:

這樣兩種類型的Layer的創建函數都有了對應的聲明。這里直接說明除了有cudnn實現的層,其他層都是采用***種方式實現的創建函數,而帶有cudnn實現的層都采用的第二種方式實現的創建函數。

Layer的初始化

介紹完創建我們看看層里面的幾個函數都是什么時候被調用的。

關鍵函數Setup此函數在之前的流程圖中的NetInit時候被調用,代碼如下:

這樣整個Layer初始化的過程中,CheckBlobCounts被***調用,然后接下來是LayerSetUp,后面才是Reshape,***才是SetLossWeights。這樣Layer初始化的生命周期大家就有了了解。

Layer的其他函數的介紹

Layer的Forward函數和Backward函數完成了網絡的前向和反向傳遞,這兩個函數在自己實現新的層必須要實現。其中Backward會修改bottom中blob的diff_,這樣就完成了誤差的方向傳導。

Protobuf介紹

Caffe中的Caffe.proto文件負責了整個Caffe網絡的構建,又負責了Caffemodel的存儲和讀取。下面用一個例子介紹Protobuf的工作方式:

利用protobuffer工具存儲512維度圖像特征:

• message 編寫:新建txt文件后綴名改為proto,編寫自己的message如下,并放入解壓的protobuff的文件夾里;

其中,dwFaceFeatSize表示特征點數量;pfFaceFeat表示人臉特征。

• 打開windows命令窗口(cmd.exe)—->cd空格,把protobuff的文件路徑復制粘貼進去——>enter;

• 輸入指令protoc *.proto –cpp_out=. ———>enter

• 可以看到文件夾里面生成“ .pb.h”和“.pb.cpp”兩個文件,說明成功了

• 下面可以和自己的代碼整合了:

• 新建你自己的工程,把“ .pb.h”和“.pb.cpp”兩個文件添加到自己的工程里,并寫上#include” *.pb.h”

• 按照配庫的教程把庫配置下就可以了

VS下Protobuf的配庫方法:

解決方案—->右擊工程名—->屬性

(1)c/c++—>常規—>附加包含目錄—>

($your protobuffer include path)\protobuffer

(2)c/c++—>鏈接器–>常規—>附加庫目錄–>

($your protobuffer lib path)\protobuffer

(3) c/c++—>鏈接器–>輸入—>附加依賴項–>

libprotobufd.lib;(帶d的為debug模式)

或libprotobuf.lib;(不帶d,為release模式)

使用protobuf進行打包的方法如下代碼:

Caffe的模型序列化

BlobProto其實就是Blob序列化成Proto的類,Caffe模型文件使用了該類。Net調用每個層的Toproto方法,每個層的Toproto方法調用了Blob類的ToProto方法,這樣完整的模型就被都序列化到proto里面了。***只要將這個proto繼承于message類的對象序列化到文件就完成了模型寫入文件。Caffe打包模型的時候就只是簡單調用了WriteProtoToBinaryFile這個函數,而這個函數里面的內容如下:

Proto.txt的簡單說明

Caffe網絡的構建和Solver的參數定義均由此類型文件完成。Net構建過程中調用ReadProtoFromTextFile將所有的網絡參數讀入。然后調用上面的流程進行整個caffe網絡的構建。這個文件決定了怎樣使用存在caffe model中的每個blob是用來做什么的,如果沒有了這個文件caffe的模型文件將無法使用,因為模型中只存儲了各種各樣的blob數據,里面只有float值,而怎樣切分這些數據是由prototxt文件決定的。

Caffe的架構在框架上采用了反射機制去動態創建層來構建Net,Protobuf本質上定義了graph,反射機制是由宏配合map結構形成的,然后使用工廠模式去實現各種各樣層的創建,當然區別于一般定義配置采用xml或者json,該項目的寫法采用了proto文件對組件進行組裝。

總結

以上為Caffe代碼架構的一個總體介紹,希望能借此幫助社區的小伙伴找到打開定制化Caffe大門的鑰匙。本文作者希望借此拋磚引玉,與更多期望了解Caffe和深度學習框架底層實現的同行交流。

責任編輯:武曉燕 來源: 網絡大數據
相關推薦

2019-03-06 09:55:54

Python 開發編程語言

2017-04-25 18:03:11

Caffe深度學習框架

2017-02-21 10:00:44

大數據深度學習框架對比

2018-03-09 22:56:52

PaddlePaddl

2024-01-18 08:31:22

go實現gorm框架

2012-11-06 11:07:59

jQueryJSjQuery框架

2013-03-05 09:16:33

MySQLInnodb

2022-12-07 08:02:43

Spring流程IOC

2025-09-24 18:39:45

2025-09-26 02:00:55

JDKCPU內存

2021-11-05 12:59:51

深度學習PytorchTenso

2024-09-11 09:25:03

Tomcat組件PREP

2023-06-27 16:42:18

Tinygrad深度學習工具

2021-11-27 05:03:09

框架深度學習

2020-08-28 17:54:31

深度學習框架

2022-11-25 07:35:57

PyTorchPython學習框架

2022-04-17 23:09:07

深度學習人工智能芯片

2011-08-31 15:59:10

LUAWeb 開發

2024-06-13 09:12:38

2015-09-11 09:17:55

JavaJava HashMa
點贊
收藏

51CTO技術棧公眾號

午夜精品久久17c| 欧美午夜影院一区| 久久影院理伦片| 中文字幕第2页| 欧美在线91| 国产视频在线观看一区二区| 污污网站免费观看| av资源在线看片| 中文字幕免费观看一区| 成人av中文| 国产情侣免费视频| 亚洲激情社区| 久久久国产91| 无码人妻丰满熟妇啪啪欧美| 99久热这里只有精品视频免费观看| 欧美日韩在线视频首页| 99亚洲精品视频| 九色网友自拍视频手机在线| 国产成人久久精品77777最新版本| 性色av一区二区三区免费| 精品一区二区在线观看视频| 同性恋视频一区| 日韩欧美中文字幕制服| 孩娇小videos精品| 人成在线免费网站| 亚洲午夜免费视频| 一区二区三区日韩视频| 韩国三级在线观看久| 高清shemale亚洲人妖| 国产女精品视频网站免费| 中文字幕激情小说| 日韩视频中文| 欧美精品久久久久a| 亚洲一二三在线观看| 精品久久电影| 国产性猛交xxxx免费看久久| 亚洲精品视频大全| 极品尤物一区| 亚洲成人精品视频在线观看| 天天操夜夜操很很操| 色8久久久久| 欧美日韩视频一区二区| 我看黄色一级片| 美女18一级毛片一品久道久久综合| 亚洲国产精品一区二区久久| 国产成人三级视频| 高清免费电影在线观看| 亚洲欧美偷拍卡通变态| 亚洲 欧洲 日韩| 韩国av网站在线| 最新高清无码专区| 超碰成人在线免费观看| 久久久久久国产精品免费无遮挡| 国产精品免费视频一区| 亚洲国产另类久久久精品极度| 国产精品四虎| 国产精品午夜在线观看| 亚洲人久久久| 毛片免费不卡| 一区二区在线观看av| 国产小视频免费| 午夜激情在线| 午夜激情一区二区三区| 日本毛片在线免费观看| 激情亚洲影院在线观看| 欧美性淫爽ww久久久久无| 91香蕉视频污版| 欧美男女视频| 欧美成人伊人久久综合网| 国产精品日日摸夜夜爽| 偷拍精品福利视频导航| 国产一区二区三区三区在线观看| 正在播放国产对白害羞| 女人香蕉久久**毛片精品| 欧美—级高清免费播放| 久久国产视频精品| 蜜臀av性久久久久蜜臀aⅴ | 亚洲精品国产精品国产自| 成人免费无码大片a毛片| 国产成人精品999在线观看| 中文字幕亚洲综合久久筱田步美| 黄色一级片中国| 日韩一级免费| 国产男人精品视频| 欧美一级视频免费| 国产网站一区二区| 午夜啪啪免费视频| 成av人片在线观看www| 91国偷自产一区二区三区成为亚洲经典| www.日本一区| 欧美在线导航| 日韩在线视频播放| 国产精品免费av一区二区| 美女mm1313爽爽久久久蜜臀| 91九色极品视频| 久久久久国产精品嫩草影院| 综合电影一区二区三区| 国产一区二区网| 亚州精品国产| 亚洲美女精品久久| 欧美日韩精品一区二区三区视频播放 | 日韩av中文在线| 五月激情四射婷婷| 1000部精品久久久久久久久| 国产在线久久久| 特级丰满少妇一级aaaa爱毛片| 国产精品麻豆视频| 97成人在线观看视频| 视频成人永久免费视频| 少妇高潮久久久久久潘金莲| 自拍偷拍欧美亚洲| 久久99久久久久久久久久久| 久久草视频在线看| 牛牛在线精品视频| 这里是久久伊人| 中文字幕第4页| 国产欧美大片| yellow视频在线观看一区二区| 国产精品一区二区婷婷| 婷婷久久综合九色综合绿巨人| xxx中文字幕| 日韩电影在线视频| 国产va免费精品高清在线观看| 亚洲精品成av人片天堂无码| 中文字幕中文字幕在线一区| 漂亮人妻被中出中文字幕| 盗摄牛牛av影视一区二区| 日韩中文字幕第一页| 日本成人一级片| 国产午夜精品在线观看| 欧美在线观看www| 国产成人一二片| 久久久久久久久电影| 国产高清免费在线观看| 亚洲人成小说网站色在线| 午夜免费福利在线| 欧美日韩激情| 国产精品r级在线| 激情综合闲人网| 色综合久久久久久久久久久| 无码人妻aⅴ一区二区三区| 在线日本成人| 国内成+人亚洲| h片在线观看视频免费| 精品不卡在线视频| 国产午夜免费视频| 波多野结衣中文字幕一区| 男女啪啪免费视频网站| 麻豆精品99| 欧美最猛性xxxx| 久久米奇亚洲| 欧美日韩亚洲综合一区| 99久久99久久精品免费看小说. | 国产精品视频导航| 9i精品一二三区| 欧美日韩免费观看一区二区三区| a一级免费视频| 国产一区二区不卡在线| 超碰10000| 成人午夜大片| 欧美在线欧美在线| 国产高清免费在线播放| 欧美性感一区二区三区| 波多野结衣久久久久| 国产精品亚洲а∨天堂免在线| 99热这里只有精品7| 香蕉大人久久国产成人av| 午夜精品福利视频| 日韩一区二区三区中文字幕| 欧美色手机在线观看| 欧美xxxx黑人xyx性爽| 不卡区在线中文字幕| 国产真实乱子伦| 91免费精品| 国产精品加勒比| 中文字幕在线中文字幕在线中三区| 亚洲深夜福利在线| 国产裸体永久免费无遮挡| 亚洲国产日韩精品| 亚洲第一成人网站| 激情五月婷婷综合| 免费av手机在线观看| 欧美理论视频| 91九色视频在线观看| 天堂在线中文网官网| 少妇高潮久久77777| 天堂av一区二区三区| 欧美日韩在线三区| 精品一区在线视频| 亚洲国产精品传媒在线观看| 亚洲妇女无套内射精| 男女视频一区二区| 精品久久久久久无码中文野结衣| 精品一区二区三区在线| 91视频99| 国产精品亲子伦av一区二区三区 | 欧美男女交配| 久久精品一偷一偷国产| 亚洲av毛片成人精品| 91精品久久久久久蜜臀| 五月天激情四射| 亚洲最新在线观看| 男人的午夜天堂| 2020国产精品| 国产十八熟妇av成人一区| 美女视频一区二区| 日韩亚洲在线视频| 在线观看日韩av电影| 中文字幕中文字幕在线中一区高清| 国产精品超碰| 91在线免费看网站| 日韩av一级| 538国产精品视频一区二区| av片在线观看| 综合136福利视频在线| 欧美日韩国产中文字幕在线| 亚洲大胆人体av| 国产按摩一区二区三区| 在线影院国内精品| 久久久久久久久久久影院| 亚洲午夜在线视频| 欧美成人精品欧美一| 中文字幕亚洲电影| 怡红院一区二区三区| 99re热视频这里只精品| av电影在线播放| 国产在线播放一区三区四| 久久黄色片网站| 秋霞电影网一区二区| 黑鬼大战白妞高潮喷白浆| 99综合精品| 国产美女在线一区| 伊人成人在线视频| 欧美国产日韩激情| 亚洲国产精品一区| 分分操这里只有精品| 国产真实久久| 成人午夜精品久久久久久久蜜臀| 国内精品美女在线观看 | 青青青国内视频在线观看软件| 久久天天躁狠狠躁老女人| 久热国产在线| 欧美精品性视频| 怡红院在线观看| 欧美巨乳在线观看| 精精国产xxxx视频在线中文版| 欧美精品情趣视频| 免费在线看电影| 97在线视频一区| 无码小电影在线观看网站免费| 91精品国产乱码久久久久久蜜臀| 看黄在线观看| 热99在线视频| 成人黄页网站视频| 亚洲精品影视| 久久久久久国产精品mv| 图片婷婷一区| 手机看片福利永久国产日韩| 青青草原综合久久大伊人精品| 亚洲一卡二卡区| 一区二区三区中文| 日韩精品在线中文字幕| 中文高清一区| 91蝌蚪视频在线观看| 首页欧美精品中文字幕| 亚洲精品久久久中文字幕| 韩国成人福利片在线播放| 中文字幕无人区二| 97久久久精品综合88久久| 少妇无套高潮一二三区| 日韩美女视频19| 中文字幕一区二区三区手机版| 色婷婷av一区| 国产精品-色哟哟| 精品99久久久久久| 国产在线超碰| 久久成人在线视频| 日韩伦理精品| 国产在线高清精品| 欧美成人基地| 亚洲综合激情五月| 在线视频精品| 色网站在线视频| 91丝袜美腿高跟国产极品老师| 国产精品酒店视频| 亚洲成人自拍一区| 中文字幕欧美色图| 亚洲国产高清自拍| 黄色网在线免费观看| 2019av中文字幕| 日日夜夜一区| 欧美一区二区三区四区五区六区 | 综合激情国产一区| 秋霞在线午夜| 国产精品一区二区久久久| 国产一区二区三区不卡av| 亚洲黄色成人久久久| 亚洲国产专区| 四虎1515hh.com| 国产欧美一区二区精品秋霞影院 | 国产成人免费观看| 国产精品一区二区99| 免费视频爱爱太爽了| 日本欧美一区二区在线观看| 精品国产鲁一鲁一区二区三区| 久久亚洲综合色| xxxx 国产| 538prom精品视频线放| 国际av在线| 91av在线影院| theporn国产在线精品| 潘金莲一级淫片aaaaaa播放1| 久久久久久黄| 黄色国产在线观看| 亚洲福利一二三区| av免费观看网址| 最近的2019中文字幕免费一页 | 888av在线| 日本不卡视频在线播放| 噜噜噜狠狠夜夜躁精品仙踪林| 在线观看av的网址| 黄色资源网久久资源365| 国产毛片欧美毛片久久久| 欧美日韩在线影院| 午夜影院在线视频| 97在线日本国产| 高清日韩中文字幕| 成人av在线播放观看| 国产一区二区剧情av在线| 最新一区二区三区| 欧美精品免费视频| 又爽又大又黄a级毛片在线视频| 国产精品99久久久久久久久| 亚洲精品无吗| 蜜臀av午夜一区二区三区| 99精品国产视频| www.av麻豆| 亚洲国产精品热久久| 嗯~啊~轻一点视频日本在线观看| 国产不卡一区二区在线观看| 在线观看日韩| 伊人av在线播放| 一区二区三区**美女毛片| 亚洲狼人综合网| 欧美精品福利在线| 日韩理论电影中文字幕| 日韩精品―中文字幕| 91欧美激情一区二区三区成人| 男女视频免费看| 亚洲人午夜精品| 国产成人久久精品麻豆二区| 中文字幕剧情在线观看一区| 国内外成人在线| 久久精品www| 精品亚洲一区二区三区四区五区| av电影一区| 日韩中文字幕一区| 九九九久久久精品| 欧美日韩精品一区二区三区视频播放 | 成年人视频观看| 久久久午夜电影| 一区两区小视频| 欧美老女人xx| 加勒比色老久久爱综合网| 日本在线视频www| 国产精品视频yy9299一区| 国产福利第一视频| 97视频在线观看网址| av在线不卡免费观看| 男女污污视频网站| 亚洲成人免费av| 国产午夜精品一区理论片| 国产自摸综合网| 亚洲成人在线| 一级黄色片网址| 精品久久久久久久久久久久久久久久久| 日本在线播放一二三区| 午夜精品一区二区三区四区| 国产剧情av麻豆香蕉精品| 久久精品国产成人av| xxxxx成人.com| 国产一区二区在线视频你懂的| 欧美一级裸体视频| 亚洲自拍偷拍九九九| 国产在线91| 成人动漫视频在线观看完整版| 天堂蜜桃91精品| 激情综合五月网| 在线观看国产欧美| 黄色美女久久久| 91女神在线观看| 精品色蜜蜜精品视频在线观看| 日本三级视频在线播放| 精品国产乱码久久久久久久软件| 老司机精品视频导航| 久草视频在线观| 欧美理论电影在线观看| 成人vr资源| 中国黄色a级片| 欧美videos中文字幕|