- Python 深度學習
- 呂云翔 劉卓然 關捷雄等編著
- 918字
- 2021-04-14 11:54:16
2.1 Caffe
2.1.1 Caffe簡介
Caffe(Convolutional Architecture for Fast Feature Embedding)是一種常用的、可讀性高的、快速深度學習框架,主要應用在視頻、圖像處理等方面。
Caffe也是第一個主流的工業級深度學習工具,專精于圖像處理。它有很多擴展,但是一些遺留的架構問題不夠靈活,且對遞歸網絡和語言建模的支持很差。對于基于層的網絡結構,Caffe的擴展性不好,用戶如果想要增加層,需要自己來實現。
2.1.2 Caffe的特點
Caffe的基本工作流程是建立在神經網絡的一個簡單假設,所有的計算都是用層的形式表示的,網絡層所做的事情就是輸入數據,然后輸出計算結果。例如,卷積就是輸入一幅圖像,然后與這一層的參數(filter)做卷積,最終輸出卷積結果。每層需要兩種函數計算:一種是forward,從輸入計算到輸出;另一種是backward,從上層gradient來計算相對于輸入層的gradient。這兩個函數實現之后,就可以把許多層連接成一個網絡,接著輸入數據(圖像、語音或其他原始數據),然后計算需要的輸出(如識別的標簽)。在訓練時,可根據已有的標簽計算loss和gradient,然后用gradient更新網絡中的參數。
Caffe是一個清晰而高效的深度學習框架,它基于純粹的C++/CUDA架構,支持命令行、Python和MATLAB接口,可以在CPU和GPU直接無縫切換。它的模型與優化都是通過配置文件來設置的,無須代碼。Caffe設計之初就做到了盡可能的模塊化,允許對數據格式、網絡層和損失函數進行擴展。Caffe的模型定義是用Protocol Buffer(協議緩沖區)語言寫進配置文件,以任意有向無環圖的形式。Caffe會根據網絡需要正確占用內存,通過一個函數調用實現CPU和GPU之間的切換。Caffe每一個單一的模塊都對應一個測試,使得測試的覆蓋非常方便,同時提供Python和MATLAB接口,用這兩種語法進行調用都是可行的。
2.1.3 Caffe層及其網絡
Caffe是一種對新手非常友好的深度學習框架模型,它的相應優化都以文本形式而非代碼形式給出。它的網絡都是有向無環圖的集合,可以直接定義,如圖2.1所示。
數據及其導數以blobs的形式在層間流動,Caffe層的定義由兩部分組成:層屬性與層參數,如圖2.2所示。

圖2.1 caffe網絡定義

圖2.2 Caffe層定義
圖2.2的前4行代碼是層屬性,定義了層名稱、層類型以及層連接結構(輸入blob和輸出blob);而后半部分是各種層參數。Blob是用以存儲數據的4維數組,例如,對于數據Number*Channel*Height*Width,對于卷積權重Output*Input*Height*Width,對于卷積偏置Output*1*1*1。
在Caffe模型中,網絡參數的定義也非常方便,可以隨意像圖2.3所示那樣設置相應參數。

圖2.3 Caffe參數配置
- 流量的秘密:Google Analytics網站分析與優化技巧(第2版)
- Java高并發核心編程(卷2):多線程、鎖、JMM、JUC、高并發設計模式
- Boost C++ Application Development Cookbook(Second Edition)
- JSP開發案例教程
- Java性能權威指南(第2版)
- C語言程序設計學習指導與習題解答
- 精通Python自動化編程
- Instant Nancy Web Development
- Raspberry Pi Robotic Projects(Third Edition)
- Python趣味編程與精彩實例
- IBM Cognos TM1 Developer's Certification guide
- OpenCV Android Programming By Example
- 深入分析GCC
- RESTful Web API Design with Node.js
- HTML5 and CSS3:Building Responsive Websites